| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527135281352913530135311353213533135341353513536135371353813539135401354113542135431354413545135461354713548135491355013551135521355313554135551355613557135581355913560135611356213563135641356513566135671356813569135701357113572135731357413575135761357713578135791358013581135821358313584135851358613587135881358913590135911359213593135941359513596135971359813599136001360113602136031360413605136061360713608136091361013611136121361313614136151361613617136181361913620136211362213623136241362513626136271362813629136301363113632136331363413635136361363713638136391364013641136421364313644136451364613647136481364913650136511365213653136541365513656136571365813659136601366113662136631366413665136661366713668136691367013671136721367313674136751367613677136781367913680136811368213683136841368513686136871368813689136901369113692136931369413695136961369713698136991370013701137021370313704137051370613707137081370913710137111371213713137141371513716137171371813719137201372113722137231372413725137261372713728137291373013731137321373313734137351373613737137381373913740137411374213743137441374513746137471374813749137501375113752137531375413755137561375713758137591376013761137621376313764137651376613767137681376913770137711377213773137741377513776137771377813779137801378113782137831378413785137861378713788137891379013791137921379313794137951379613797137981379913800138011380213803138041380513806138071380813809138101381113812138131381413815138161381713818138191382013821138221382313824138251382613827138281382913830138311383213833138341383513836138371383813839138401384113842138431384413845138461384713848138491385013851138521385313854138551385613857138581385913860138611386213863138641386513866138671386813869138701387113872138731387413875138761387713878138791388013881138821388313884138851388613887138881388913890138911389213893138941389513896138971389813899139001390113902139031390413905139061390713908139091391013911139121391313914139151391613917139181391913920139211392213923139241392513926139271392813929139301393113932139331393413935139361393713938139391394013941139421394313944139451394613947139481394913950139511395213953139541395513956139571395813959139601396113962139631396413965139661396713968139691397013971139721397313974139751397613977139781397913980139811398213983139841398513986139871398813989139901399113992139931399413995139961399713998139991400014001140021400314004140051400614007140081400914010140111401214013140141401514016140171401814019140201402114022140231402414025140261402714028140291403014031140321403314034140351403614037140381403914040140411404214043140441404514046140471404814049140501405114052140531405414055140561405714058140591406014061140621406314064140651406614067140681406914070140711407214073140741407514076140771407814079140801408114082140831408414085140861408714088140891409014091140921409314094140951409614097140981409914100141011410214103141041410514106141071410814109141101411114112141131411414115141161411714118141191412014121141221412314124141251412614127141281412914130141311413214133141341413514136141371413814139141401414114142141431414414145141461414714148141491415014151141521415314154141551415614157141581415914160141611416214163141641416514166141671416814169141701417114172141731417414175141761417714178141791418014181141821418314184141851418614187141881418914190141911419214193141941419514196141971419814199142001420114202142031420414205142061420714208142091421014211142121421314214142151421614217142181421914220142211422214223142241422514226142271422814229142301423114232142331423414235142361423714238142391424014241142421424314244142451424614247142481424914250142511425214253142541425514256142571425814259142601426114262142631426414265142661426714268142691427014271142721427314274142751427614277142781427914280142811428214283142841428514286142871428814289142901429114292142931429414295142961429714298142991430014301143021430314304143051430614307143081430914310143111431214313143141431514316143171431814319143201432114322143231432414325143261432714328143291433014331143321433314334143351433614337143381433914340143411434214343143441434514346143471434814349143501435114352143531435414355143561435714358143591436014361143621436314364143651436614367143681436914370143711437214373143741437514376143771437814379143801438114382143831438414385143861438714388143891439014391143921439314394143951439614397143981439914400144011440214403144041440514406144071440814409144101441114412144131441414415144161441714418144191442014421144221442314424144251442614427144281442914430144311443214433144341443514436144371443814439144401444114442144431444414445144461444714448144491445014451144521445314454144551445614457144581445914460144611446214463144641446514466144671446814469144701447114472144731447414475144761447714478144791448014481144821448314484144851448614487144881448914490144911449214493144941449514496144971449814499145001450114502145031450414505145061450714508145091451014511145121451314514145151451614517145181451914520145211452214523145241452514526145271452814529145301453114532145331453414535145361453714538145391454014541145421454314544145451454614547145481454914550145511455214553145541455514556145571455814559145601456114562145631456414565145661456714568145691457014571145721457314574145751457614577145781457914580145811458214583145841458514586145871458814589145901459114592145931459414595145961459714598145991460014601146021460314604146051460614607146081460914610146111461214613146141461514616146171461814619146201462114622146231462414625146261462714628146291463014631146321463314634146351463614637146381463914640146411464214643146441464514646146471464814649146501465114652146531465414655146561465714658146591466014661146621466314664146651466614667146681466914670146711467214673146741467514676146771467814679146801468114682146831468414685146861468714688146891469014691146921469314694146951469614697146981469914700147011470214703147041470514706147071470814709147101471114712147131471414715147161471714718147191472014721147221472314724147251472614727147281472914730147311473214733147341473514736147371473814739147401474114742147431474414745147461474714748147491475014751147521475314754147551475614757147581475914760147611476214763147641476514766147671476814769147701477114772147731477414775147761477714778147791478014781147821478314784147851478614787147881478914790147911479214793147941479514796147971479814799148001480114802148031480414805148061480714808148091481014811148121481314814148151481614817148181481914820148211482214823148241482514826148271482814829148301483114832148331483414835148361483714838148391484014841148421484314844148451484614847148481484914850148511485214853148541485514856148571485814859148601486114862148631486414865148661486714868148691487014871148721487314874148751487614877148781487914880148811488214883148841488514886148871488814889148901489114892148931489414895148961489714898148991490014901149021490314904149051490614907149081490914910149111491214913149141491514916149171491814919149201492114922149231492414925149261492714928149291493014931149321493314934149351493614937149381493914940149411494214943149441494514946149471494814949149501495114952149531495414955149561495714958149591496014961149621496314964149651496614967149681496914970149711497214973149741497514976149771497814979149801498114982149831498414985149861498714988149891499014991149921499314994149951499614997149981499915000150011500215003150041500515006150071500815009150101501115012150131501415015150161501715018150191502015021150221502315024150251502615027150281502915030150311503215033150341503515036150371503815039150401504115042150431504415045150461504715048150491505015051150521505315054150551505615057150581505915060150611506215063150641506515066150671506815069150701507115072150731507415075150761507715078150791508015081150821508315084150851508615087150881508915090150911509215093150941509515096150971509815099151001510115102151031510415105151061510715108151091511015111151121511315114151151511615117151181511915120151211512215123151241512515126151271512815129151301513115132151331513415135151361513715138151391514015141151421514315144151451514615147151481514915150151511515215153151541515515156151571515815159151601516115162151631516415165151661516715168151691517015171151721517315174151751517615177151781517915180151811518215183151841518515186151871518815189151901519115192151931519415195151961519715198151991520015201152021520315204152051520615207152081520915210152111521215213152141521515216152171521815219152201522115222152231522415225152261522715228152291523015231152321523315234152351523615237152381523915240152411524215243152441524515246152471524815249152501525115252152531525415255152561525715258152591526015261152621526315264152651526615267152681526915270152711527215273152741527515276152771527815279152801528115282152831528415285152861528715288152891529015291152921529315294152951529615297152981529915300153011530215303153041530515306153071530815309153101531115312153131531415315153161531715318153191532015321153221532315324153251532615327153281532915330153311533215333153341533515336153371533815339153401534115342153431534415345153461534715348153491535015351153521535315354153551535615357153581535915360153611536215363153641536515366153671536815369153701537115372153731537415375153761537715378153791538015381153821538315384153851538615387153881538915390153911539215393153941539515396153971539815399154001540115402154031540415405154061540715408154091541015411154121541315414154151541615417154181541915420154211542215423154241542515426154271542815429154301543115432154331543415435154361543715438154391544015441154421544315444154451544615447154481544915450154511545215453154541545515456154571545815459154601546115462154631546415465154661546715468154691547015471154721547315474154751547615477154781547915480154811548215483154841548515486154871548815489154901549115492154931549415495154961549715498154991550015501155021550315504155051550615507155081550915510155111551215513155141551515516155171551815519155201552115522155231552415525155261552715528155291553015531155321553315534155351553615537155381553915540155411554215543155441554515546155471554815549155501555115552155531555415555155561555715558155591556015561155621556315564155651556615567155681556915570155711557215573155741557515576155771557815579155801558115582155831558415585155861558715588155891559015591155921559315594155951559615597155981559915600156011560215603156041560515606156071560815609156101561115612156131561415615156161561715618156191562015621156221562315624156251562615627156281562915630156311563215633156341563515636156371563815639156401564115642156431564415645156461564715648156491565015651156521565315654156551565615657156581565915660156611566215663156641566515666156671566815669156701567115672156731567415675156761567715678156791568015681156821568315684156851568615687156881568915690156911569215693156941569515696156971569815699157001570115702157031570415705157061570715708157091571015711157121571315714157151571615717157181571915720157211572215723157241572515726157271572815729157301573115732157331573415735157361573715738157391574015741157421574315744157451574615747157481574915750157511575215753157541575515756157571575815759157601576115762157631576415765157661576715768157691577015771157721577315774157751577615777157781577915780157811578215783157841578515786157871578815789157901579115792157931579415795157961579715798157991580015801158021580315804158051580615807158081580915810158111581215813158141581515816158171581815819158201582115822158231582415825158261582715828158291583015831158321583315834158351583615837158381583915840158411584215843158441584515846158471584815849158501585115852158531585415855158561585715858158591586015861158621586315864158651586615867158681586915870158711587215873158741587515876158771587815879158801588115882158831588415885158861588715888158891589015891158921589315894158951589615897158981589915900159011590215903159041590515906159071590815909159101591115912159131591415915159161591715918159191592015921159221592315924159251592615927159281592915930159311593215933159341593515936159371593815939159401594115942159431594415945159461594715948159491595015951159521595315954159551595615957159581595915960159611596215963159641596515966159671596815969159701597115972159731597415975159761597715978159791598015981159821598315984159851598615987159881598915990159911599215993159941599515996159971599815999160001600116002160031600416005160061600716008160091601016011160121601316014160151601616017160181601916020160211602216023160241602516026160271602816029160301603116032160331603416035160361603716038160391604016041160421604316044160451604616047160481604916050160511605216053160541605516056160571605816059160601606116062160631606416065160661606716068160691607016071160721607316074160751607616077160781607916080160811608216083160841608516086160871608816089160901609116092160931609416095160961609716098160991610016101161021610316104161051610616107161081610916110161111611216113161141611516116161171611816119161201612116122161231612416125161261612716128161291613016131161321613316134161351613616137161381613916140161411614216143161441614516146161471614816149161501615116152161531615416155161561615716158161591616016161161621616316164161651616616167161681616916170161711617216173161741617516176161771617816179161801618116182161831618416185161861618716188161891619016191161921619316194161951619616197161981619916200162011620216203162041620516206162071620816209162101621116212162131621416215162161621716218162191622016221162221622316224162251622616227162281622916230162311623216233162341623516236162371623816239162401624116242162431624416245162461624716248162491625016251162521625316254162551625616257162581625916260162611626216263162641626516266162671626816269162701627116272162731627416275162761627716278162791628016281162821628316284 |
- {"Time":"2026-09-12T11:38:26.9418399+08:00","Action":"start","Package":"github.com/Wei-Shaw/sub2api/internal/service"}
- {"Time":"2026-09-12T11:38:28.9128759+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Output":"2026/09/12 03:38:28 Timezone initialized: UTC (UTC offset: +00:00)\n"}
- {"Time":"2026-09-12T11:38:28.9128759+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeOpenAI"}
- {"Time":"2026-09-12T11:38:28.9128759+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeOpenAI","Output":"=== RUN TestPreviewAntiDegradeOpenAI\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9128759+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeOpenAI","Output":"--- PASS: TestPreviewAntiDegradeOpenAI (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9128759+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeOpenAI","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9128759+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeAnthropic"}
- {"Time":"2026-09-12T11:38:28.9128759+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeAnthropic","Output":"=== RUN TestPreviewAntiDegradeAnthropic\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9128759+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeAnthropic","Output":"--- PASS: TestPreviewAntiDegradeAnthropic (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9128759+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeAnthropic","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9128759+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeNothingToDo"}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeNothingToDo","Output":"=== RUN TestPreviewAntiDegradeNothingToDo\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeNothingToDo","Output":"--- PASS: TestPreviewAntiDegradeNothingToDo (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeNothingToDo","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeAlreadyEnabled"}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeAlreadyEnabled","Output":"=== RUN TestPreviewAntiDegradeAlreadyEnabled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeAlreadyEnabled","Output":"--- PASS: TestPreviewAntiDegradeAlreadyEnabled (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeAlreadyEnabled","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyRevertAntiDegrade"}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyRevertAntiDegrade","Output":"=== RUN TestApplyRevertAntiDegrade\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyRevertAntiDegrade","Output":"--- PASS: TestApplyRevertAntiDegrade (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyRevertAntiDegrade","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRevertAntiDegradeRejectsBadSnapshot"}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRevertAntiDegradeRejectsBadSnapshot","Output":"=== RUN TestRevertAntiDegradeRejectsBadSnapshot\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRevertAntiDegradeRejectsBadSnapshot","Output":"--- PASS: TestRevertAntiDegradeRejectsBadSnapshot (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRevertAntiDegradeRejectsBadSnapshot","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed"}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed","Output":"=== RUN TestAccount_IsCodexCLIOnlyAppServerAllowed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_allow_app_server=true_→_true"}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_allow_app_server=true_→_true","Output":"=== RUN TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_allow_app_server=true_→_true\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_allow_app_server=true_→_true","Output":"--- PASS: TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_allow_app_server=true_→_true (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_allow_app_server=true_→_true","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_allow_app_server=false_→_false"}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_allow_app_server=false_→_false","Output":"=== RUN TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_allow_app_server=false_→_false\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_allow_app_server=false_→_false","Output":"--- PASS: TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_allow_app_server=false_→_false (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_allow_app_server=false_→_false","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_字段缺失_→_false"}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_字段缺失_→_false","Output":"=== RUN TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_字段缺失_→_false\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_字段缺失_→_false","Output":"--- PASS: TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_字段缺失_→_false (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_字段缺失_→_false","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_关_→_即便_allow_app_server=true_也_false"}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_关_→_即便_allow_app_server=true_也_false","Output":"=== RUN TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_关_→_即便_allow_app_server=true_也_false\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_关_→_即便_allow_app_server=true_也_false","Output":"--- PASS: TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_关_→_即便_allow_app_server=true_也_false (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_关_→_即便_allow_app_server=true_也_false","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed","Output":"--- PASS: TestAccount_IsCodexCLIOnlyAppServerAllowed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBulkUpdateAccountsDoesNotPrewriteCodexSeed"}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBulkUpdateAccountsDoesNotPrewriteCodexSeed","Output":"=== RUN TestBulkUpdateAccountsDoesNotPrewriteCodexSeed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBulkUpdateAccountsDoesNotPrewriteCodexSeed","Output":"--- PASS: TestBulkUpdateAccountsDoesNotPrewriteCodexSeed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBulkUpdateAccountsDoesNotPrewriteCodexSeed","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDuplicateAccountDoesNotCopyCodexFingerprintSeed"}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDuplicateAccountDoesNotCopyCodexFingerprintSeed","Output":"=== RUN TestDuplicateAccountDoesNotCopyCodexFingerprintSeed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDuplicateAccountDoesNotCopyCodexFingerprintSeed","Output":"--- PASS: TestDuplicateAccountDoesNotCopyCodexFingerprintSeed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDuplicateAccountDoesNotCopyCodexFingerprintSeed","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountServiceCreateAndUpdateCodexSeedLifecycle"}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountServiceCreateAndUpdateCodexSeedLifecycle","Output":"=== RUN TestAccountServiceCreateAndUpdateCodexSeedLifecycle\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountServiceCreateAndUpdateCodexSeedLifecycle","Output":"--- PASS: TestAccountServiceCreateAndUpdateCodexSeedLifecycle (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountServiceCreateAndUpdateCodexSeedLifecycle","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1IdentityIsUniquePersistentAndDoesNotMergeThreads"}
- {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1IdentityIsUniquePersistentAndDoesNotMergeThreads","Output":"=== RUN TestMode1IdentityIsUniquePersistentAndDoesNotMergeThreads\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1IdentityIsUniquePersistentAndDoesNotMergeThreads","Output":"--- PASS: TestMode1IdentityIsUniquePersistentAndDoesNotMergeThreads (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1IdentityIsUniquePersistentAndDoesNotMergeThreads","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1RuntimeRejectsConfigurationDrift"}
- {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1RuntimeRejectsConfigurationDrift","Output":"=== RUN TestMode1RuntimeRejectsConfigurationDrift\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1RuntimeRejectsConfigurationDrift","Output":"--- PASS: TestMode1RuntimeRejectsConfigurationDrift (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1RuntimeRejectsConfigurationDrift","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1InvalidMarkerDoesNotDowngrade"}
- {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1InvalidMarkerDoesNotDowngrade","Output":"=== RUN TestMode1InvalidMarkerDoesNotDowngrade\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1InvalidMarkerDoesNotDowngrade","Output":"--- PASS: TestMode1InvalidMarkerDoesNotDowngrade (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1InvalidMarkerDoesNotDowngrade","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1DifferentAccountsWithDuplicatedLegacyDeviceStillDiffer"}
- {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1DifferentAccountsWithDuplicatedLegacyDeviceStillDiffer","Output":"=== RUN TestMode1DifferentAccountsWithDuplicatedLegacyDeviceStillDiffer\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1DifferentAccountsWithDuplicatedLegacyDeviceStillDiffer","Output":"--- PASS: TestMode1DifferentAccountsWithDuplicatedLegacyDeviceStillDiffer (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1DifferentAccountsWithDuplicatedLegacyDeviceStillDiffer","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1PartialAndBulkUpdatesCannotDisablePolicy"}
- {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1PartialAndBulkUpdatesCannotDisablePolicy","Output":"=== RUN TestMode1PartialAndBulkUpdatesCannotDisablePolicy\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1PartialAndBulkUpdatesCannotDisablePolicy","Output":"--- PASS: TestMode1PartialAndBulkUpdatesCannotDisablePolicy (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1PartialAndBulkUpdatesCannotDisablePolicy","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1HTTPAndAccountTestUseSameTLSWithoutFallback"}
- {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1HTTPAndAccountTestUseSameTLSWithoutFallback","Output":"=== RUN TestMode1HTTPAndAccountTestUseSameTLSWithoutFallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1HTTPAndAccountTestUseSameTLSWithoutFallback","Output":"--- PASS: TestMode1HTTPAndAccountTestUseSameTLSWithoutFallback (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1HTTPAndAccountTestUseSameTLSWithoutFallback","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1UsesExistingPluginRouting"}
- {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1UsesExistingPluginRouting","Output":"=== RUN TestMode1UsesExistingPluginRouting\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1UsesExistingPluginRouting","Output":"--- PASS: TestMode1UsesExistingPluginRouting (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1UsesExistingPluginRouting","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1IntegrityPreservesReasoningToolsAndBudget"}
- {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1IntegrityPreservesReasoningToolsAndBudget","Output":"=== RUN TestMode1IntegrityPreservesReasoningToolsAndBudget\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9165634+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1IntegrityPreservesReasoningToolsAndBudget","Output":"--- PASS: TestMode1IntegrityPreservesReasoningToolsAndBudget (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9165634+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1IntegrityPreservesReasoningToolsAndBudget","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9165634+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough"}
- {"Time":"2026-09-12T11:38:28.9165634+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough","Output":"=== RUN TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9165634+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/false"}
- {"Time":"2026-09-12T11:38:28.9165634+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/false","Output":"=== RUN TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/false\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9181443+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/false","Output":"--- PASS: TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/false (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/false","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/true"}
- {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/true","Output":"=== RUN TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/true\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/true","Output":"2026/09/12 03:38:28 [OpenAI 自动透传] 命中自动透传分支: account=1 name=mode1 type=oauth model=gpt-5.2 stream=true\n"}
- {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/true","Output":"--- PASS: TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/true (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/true","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough","Output":"--- PASS: TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3MigrationPreservesOriginalSnapshotAndIdentity"}
- {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3MigrationPreservesOriginalSnapshotAndIdentity","Output":"=== RUN TestMode1V3MigrationPreservesOriginalSnapshotAndIdentity\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3MigrationPreservesOriginalSnapshotAndIdentity","Output":"--- PASS: TestMode1V3MigrationPreservesOriginalSnapshotAndIdentity (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3MigrationPreservesOriginalSnapshotAndIdentity","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1InvalidVersionCanBeExplicitlyRestored"}
- {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1InvalidVersionCanBeExplicitlyRestored","Output":"=== RUN TestMode1InvalidVersionCanBeExplicitlyRestored\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1InvalidVersionCanBeExplicitlyRestored","Output":"--- PASS: TestMode1InvalidVersionCanBeExplicitlyRestored (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1InvalidVersionCanBeExplicitlyRestored","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3StandardTransportWithTLSGloballyDisabled"}
- {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3StandardTransportWithTLSGloballyDisabled","Output":"=== RUN TestMode1V3StandardTransportWithTLSGloballyDisabled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3StandardTransportWithTLSGloballyDisabled","Output":"--- PASS: TestMode1V3StandardTransportWithTLSGloballyDisabled (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3StandardTransportWithTLSGloballyDisabled","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3"}
- {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3","Output":"=== RUN TestMode1ForwardRegressionV2AndV3\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=0"}
- {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=0","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=0\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9202146+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=0","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=0 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9202146+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=0","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9202146+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=1"}
- {"Time":"2026-09-12T11:38:28.9202146+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=1","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=1\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.92179+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=1","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=1 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.92179+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=1","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.92179+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=2"}
- {"Time":"2026-09-12T11:38:28.92179+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=2","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=2\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.92179+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=2","Output":"2026/09/12 03:38:28 [OpenAI] Upstream model resolved: gpt-5.4-high -\u003e gpt-5.4 (account: , type: oauth, isCodexCLI: false)\n"}
- {"Time":"2026-09-12T11:38:28.92179+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=2","Output":"2026/09/12 03:38:28 [OpenAI] Normalized reasoning.effort: minimal -\u003e none (account: )\n"}
- {"Time":"2026-09-12T11:38:28.9238503+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=2","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=2 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9238503+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=2","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9238503+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=3"}
- {"Time":"2026-09-12T11:38:28.9238503+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=3","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=3\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9253875+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=3","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=3 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9253875+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=3","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9253875+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=4"}
- {"Time":"2026-09-12T11:38:28.9253875+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=4","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=4\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9266474+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=4","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=4 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9266474+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=4","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9266474+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=0"}
- {"Time":"2026-09-12T11:38:28.9266474+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=0","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=0\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9266474+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=0","Output":"2026/09/12 03:38:28 [OpenAI 自动透传] 命中自动透传分支: account=1 name= type=oauth model=gpt-5.2 stream=true\n"}
- {"Time":"2026-09-12T11:38:28.9266474+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=0","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=0 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9266474+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=0","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9266474+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=1"}
- {"Time":"2026-09-12T11:38:28.9266474+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=1","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=1\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9266474+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=1","Output":"2026/09/12 03:38:28 [OpenAI 自动透传] 命中自动透传分支: account=1 name= type=oauth model=gpt-5.2 stream=true\n"}
- {"Time":"2026-09-12T11:38:28.9271556+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=1","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=1 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9271556+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=1","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9271556+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=2"}
- {"Time":"2026-09-12T11:38:28.9271556+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=2","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=2\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9271556+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=2","Output":"2026/09/12 03:38:28 [OpenAI 自动透传] 命中自动透传分支: account=1 name= type=oauth model=gpt-5.4-high stream=true\n"}
- {"Time":"2026-09-12T11:38:28.9271556+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=2","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=2 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9271556+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=2","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9271556+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=3"}
- {"Time":"2026-09-12T11:38:28.9271556+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=3","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=3\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9271556+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=3","Output":"2026/09/12 03:38:28 [OpenAI 自动透传] 命中自动透传分支: account=1 name= type=oauth model=gpt-5.2 stream=true\n"}
- {"Time":"2026-09-12T11:38:28.9271556+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=3","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=3 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9271556+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=3","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9271556+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=4"}
- {"Time":"2026-09-12T11:38:28.9271556+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=4","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=4\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9276775+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=4","Output":"2026/09/12 03:38:28 [OpenAI 自动透传] 命中自动透传分支: account=1 name= type=oauth model=gpt-5.2 stream=true\n"}
- {"Time":"2026-09-12T11:38:28.9276775+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=4","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=4 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9276775+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=4","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9276775+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=0"}
- {"Time":"2026-09-12T11:38:28.9276775+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=0","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=0\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.928702+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=0","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=0 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.928702+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=0","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.928702+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=1"}
- {"Time":"2026-09-12T11:38:28.928702+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=1","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=1\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9307428+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=1","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=1 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9307428+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=1","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9307428+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=2"}
- {"Time":"2026-09-12T11:38:28.9307428+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=2","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=2\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9307428+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=2","Output":"2026/09/12 03:38:28 [OpenAI] Upstream model resolved: gpt-5.4-high -\u003e gpt-5.4 (account: , type: oauth, isCodexCLI: false)\n"}
- {"Time":"2026-09-12T11:38:28.9312541+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=2","Output":"2026/09/12 03:38:28 [OpenAI] Normalized reasoning.effort: minimal -\u003e none (account: )\n"}
- {"Time":"2026-09-12T11:38:28.9322955+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=2","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=2 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9322955+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=2","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9322955+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=3"}
- {"Time":"2026-09-12T11:38:28.9322955+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=3","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=3\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9333661+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=3","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=3 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9333661+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=3","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9333661+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=4"}
- {"Time":"2026-09-12T11:38:28.9333661+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=4","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=4\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9349717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=4","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=4 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9349717+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=4","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9349717+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=0"}
- {"Time":"2026-09-12T11:38:28.9349717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=0","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=0\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9349717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=0","Output":"2026/09/12 03:38:28 [OpenAI 自动透传] 命中自动透传分支: account=1 name= type=oauth model=gpt-5.2 stream=true\n"}
- {"Time":"2026-09-12T11:38:28.9349717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=0","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=0 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9349717+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=0","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9349717+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=1"}
- {"Time":"2026-09-12T11:38:28.9349717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=1","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=1\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9349717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=1","Output":"2026/09/12 03:38:28 [OpenAI 自动透传] 命中自动透传分支: account=1 name= type=oauth model=gpt-5.2 stream=true\n"}
- {"Time":"2026-09-12T11:38:28.9349717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=1","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=1 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9349717+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=1","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9349717+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=2"}
- {"Time":"2026-09-12T11:38:28.9349717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=2","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=2\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9349717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=2","Output":"2026/09/12 03:38:28 [OpenAI 自动透传] 命中自动透传分支: account=1 name= type=oauth model=gpt-5.4-high stream=true\n"}
- {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=2","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=2 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=2","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=3"}
- {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=3","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=3\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=3","Output":"2026/09/12 03:38:28 [OpenAI 自动透传] 命中自动透传分支: account=1 name= type=oauth model=gpt-5.2 stream=true\n"}
- {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=3","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=3 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=3","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=4"}
- {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=4","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=4\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=4","Output":"2026/09/12 03:38:28 [OpenAI 自动透传] 命中自动透传分支: account=1 name= type=oauth model=gpt-5.2 stream=true\n"}
- {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=4","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=4 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=4","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3 (0.02s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3","Elapsed":0.02}
- {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode"}
- {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode","Output":"=== RUN TestAccountGetOpenAICompactMode\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/nil_account_defaults_to_auto"}
- {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/nil_account_defaults_to_auto","Output":"=== RUN TestAccountGetOpenAICompactMode/nil_account_defaults_to_auto\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/nil_account_defaults_to_auto","Output":"--- PASS: TestAccountGetOpenAICompactMode/nil_account_defaults_to_auto (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/nil_account_defaults_to_auto","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/non_openai_account_defaults_to_auto"}
- {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/non_openai_account_defaults_to_auto","Output":"=== RUN TestAccountGetOpenAICompactMode/non_openai_account_defaults_to_auto\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/non_openai_account_defaults_to_auto","Output":"--- PASS: TestAccountGetOpenAICompactMode/non_openai_account_defaults_to_auto (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/non_openai_account_defaults_to_auto","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/missing_extra_defaults_to_auto"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/missing_extra_defaults_to_auto","Output":"=== RUN TestAccountGetOpenAICompactMode/missing_extra_defaults_to_auto\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/missing_extra_defaults_to_auto","Output":"--- PASS: TestAccountGetOpenAICompactMode/missing_extra_defaults_to_auto (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/missing_extra_defaults_to_auto","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/invalid_mode_falls_back_to_auto"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/invalid_mode_falls_back_to_auto","Output":"=== RUN TestAccountGetOpenAICompactMode/invalid_mode_falls_back_to_auto\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/invalid_mode_falls_back_to_auto","Output":"--- PASS: TestAccountGetOpenAICompactMode/invalid_mode_falls_back_to_auto (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/invalid_mode_falls_back_to_auto","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/force_on_is_normalized"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/force_on_is_normalized","Output":"=== RUN TestAccountGetOpenAICompactMode/force_on_is_normalized\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/force_on_is_normalized","Output":"--- PASS: TestAccountGetOpenAICompactMode/force_on_is_normalized (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/force_on_is_normalized","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/force_off_is_normalized"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/force_off_is_normalized","Output":"=== RUN TestAccountGetOpenAICompactMode/force_off_is_normalized\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/force_off_is_normalized","Output":"--- PASS: TestAccountGetOpenAICompactMode/force_off_is_normalized (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/force_off_is_normalized","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode","Output":"--- PASS: TestAccountGetOpenAICompactMode (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown","Output":"=== RUN TestAccountOpenAICompactSupportKnown\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/nil_account_is_unknown"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/nil_account_is_unknown","Output":"=== RUN TestAccountOpenAICompactSupportKnown/nil_account_is_unknown\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/nil_account_is_unknown","Output":"--- PASS: TestAccountOpenAICompactSupportKnown/nil_account_is_unknown (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/nil_account_is_unknown","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/non_openai_account_is_unknown"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/non_openai_account_is_unknown","Output":"=== RUN TestAccountOpenAICompactSupportKnown/non_openai_account_is_unknown\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/non_openai_account_is_unknown","Output":"--- PASS: TestAccountOpenAICompactSupportKnown/non_openai_account_is_unknown (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/non_openai_account_is_unknown","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/force_on_overrides_probe_state"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/force_on_overrides_probe_state","Output":"=== RUN TestAccountOpenAICompactSupportKnown/force_on_overrides_probe_state\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/force_on_overrides_probe_state","Output":"--- PASS: TestAccountOpenAICompactSupportKnown/force_on_overrides_probe_state (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/force_on_overrides_probe_state","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/force_off_overrides_probe_state"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/force_off_overrides_probe_state","Output":"=== RUN TestAccountOpenAICompactSupportKnown/force_off_overrides_probe_state\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/force_off_overrides_probe_state","Output":"--- PASS: TestAccountOpenAICompactSupportKnown/force_off_overrides_probe_state (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/force_off_overrides_probe_state","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/auto_true_is_known_supported"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/auto_true_is_known_supported","Output":"=== RUN TestAccountOpenAICompactSupportKnown/auto_true_is_known_supported\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/auto_true_is_known_supported","Output":"--- PASS: TestAccountOpenAICompactSupportKnown/auto_true_is_known_supported (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/auto_true_is_known_supported","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/auto_false_is_known_unsupported"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/auto_false_is_known_unsupported","Output":"=== RUN TestAccountOpenAICompactSupportKnown/auto_false_is_known_unsupported\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/auto_false_is_known_unsupported","Output":"--- PASS: TestAccountOpenAICompactSupportKnown/auto_false_is_known_unsupported (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/auto_false_is_known_unsupported","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/auto_without_probe_state_remains_unknown"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/auto_without_probe_state_remains_unknown","Output":"=== RUN TestAccountOpenAICompactSupportKnown/auto_without_probe_state_remains_unknown\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/auto_without_probe_state_remains_unknown","Output":"--- PASS: TestAccountOpenAICompactSupportKnown/auto_without_probe_state_remains_unknown (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/auto_without_probe_state_remains_unknown","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/invalid_probe_field_remains_unknown"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/invalid_probe_field_remains_unknown","Output":"=== RUN TestAccountOpenAICompactSupportKnown/invalid_probe_field_remains_unknown\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/invalid_probe_field_remains_unknown","Output":"--- PASS: TestAccountOpenAICompactSupportKnown/invalid_probe_field_remains_unknown (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/invalid_probe_field_remains_unknown","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown","Output":"--- PASS: TestAccountOpenAICompactSupportKnown (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact","Output":"=== RUN TestAccountAllowsOpenAICompact\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/nil_account_does_not_allow_compact"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/nil_account_does_not_allow_compact","Output":"=== RUN TestAccountAllowsOpenAICompact/nil_account_does_not_allow_compact\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/nil_account_does_not_allow_compact","Output":"--- PASS: TestAccountAllowsOpenAICompact/nil_account_does_not_allow_compact (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/nil_account_does_not_allow_compact","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/non_openai_account_does_not_allow_compact"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/non_openai_account_does_not_allow_compact","Output":"=== RUN TestAccountAllowsOpenAICompact/non_openai_account_does_not_allow_compact\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/non_openai_account_does_not_allow_compact","Output":"--- PASS: TestAccountAllowsOpenAICompact/non_openai_account_does_not_allow_compact (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/non_openai_account_does_not_allow_compact","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/unknown_openai_account_remains_allowed"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/unknown_openai_account_remains_allowed","Output":"=== RUN TestAccountAllowsOpenAICompact/unknown_openai_account_remains_allowed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/unknown_openai_account_remains_allowed","Output":"--- PASS: TestAccountAllowsOpenAICompact/unknown_openai_account_remains_allowed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/unknown_openai_account_remains_allowed","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/supported_openai_account_is_allowed"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/supported_openai_account_is_allowed","Output":"=== RUN TestAccountAllowsOpenAICompact/supported_openai_account_is_allowed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/supported_openai_account_is_allowed","Output":"--- PASS: TestAccountAllowsOpenAICompact/supported_openai_account_is_allowed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/supported_openai_account_is_allowed","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/unsupported_openai_account_is_rejected"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/unsupported_openai_account_is_rejected","Output":"=== RUN TestAccountAllowsOpenAICompact/unsupported_openai_account_is_rejected\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/unsupported_openai_account_is_rejected","Output":"--- PASS: TestAccountAllowsOpenAICompact/unsupported_openai_account_is_rejected (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/unsupported_openai_account_is_rejected","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/force_on_is_allowed"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/force_on_is_allowed","Output":"=== RUN TestAccountAllowsOpenAICompact/force_on_is_allowed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/force_on_is_allowed","Output":"--- PASS: TestAccountAllowsOpenAICompact/force_on_is_allowed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/force_on_is_allowed","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/force_off_is_rejected"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/force_off_is_rejected","Output":"=== RUN TestAccountAllowsOpenAICompact/force_off_is_rejected\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/force_off_is_rejected","Output":"--- PASS: TestAccountAllowsOpenAICompact/force_off_is_rejected (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/force_off_is_rejected","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact","Output":"--- PASS: TestAccountAllowsOpenAICompact (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled","Output":"=== RUN TestAccount_IsOpenAIPassthroughEnabled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled/新字段开启"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled/新字段开启","Output":"=== RUN TestAccount_IsOpenAIPassthroughEnabled/新字段开启\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled/新字段开启","Output":"--- PASS: TestAccount_IsOpenAIPassthroughEnabled/新字段开启 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled/新字段开启","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled/兼容旧字段"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled/兼容旧字段","Output":"=== RUN TestAccount_IsOpenAIPassthroughEnabled/兼容旧字段\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled/兼容旧字段","Output":"--- PASS: TestAccount_IsOpenAIPassthroughEnabled/兼容旧字段 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled/兼容旧字段","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled/非OpenAI账号始终关闭"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled/非OpenAI账号始终关闭","Output":"=== RUN TestAccount_IsOpenAIPassthroughEnabled/非OpenAI账号始终关闭\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled/非OpenAI账号始终关闭","Output":"--- PASS: TestAccount_IsOpenAIPassthroughEnabled/非OpenAI账号始终关闭 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled/非OpenAI账号始终关闭","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled/空额外配置默认关闭"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled/空额外配置默认关闭","Output":"=== RUN TestAccount_IsOpenAIPassthroughEnabled/空额外配置默认关闭\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled/空额外配置默认关闭","Output":"--- PASS: TestAccount_IsOpenAIPassthroughEnabled/空额外配置默认关闭 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled/空额外配置默认关闭","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled","Output":"--- PASS: TestAccount_IsOpenAIPassthroughEnabled (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIOAuthPassthroughEnabled"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIOAuthPassthroughEnabled","Output":"=== RUN TestAccount_IsOpenAIOAuthPassthroughEnabled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIOAuthPassthroughEnabled/仅OAuth类型允许返回开启"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIOAuthPassthroughEnabled/仅OAuth类型允许返回开启","Output":"=== RUN TestAccount_IsOpenAIOAuthPassthroughEnabled/仅OAuth类型允许返回开启\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIOAuthPassthroughEnabled/仅OAuth类型允许返回开启","Output":"--- PASS: TestAccount_IsOpenAIOAuthPassthroughEnabled/仅OAuth类型允许返回开启 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIOAuthPassthroughEnabled/仅OAuth类型允许返回开启","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIOAuthPassthroughEnabled","Output":"--- PASS: TestAccount_IsOpenAIOAuthPassthroughEnabled (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIOAuthPassthroughEnabled","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled","Output":"=== RUN TestAccount_IsCodexCLIOnlyEnabled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/OpenAI_OAuth_开启"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/OpenAI_OAuth_开启","Output":"=== RUN TestAccount_IsCodexCLIOnlyEnabled/OpenAI_OAuth_开启\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/OpenAI_OAuth_开启","Output":"--- PASS: TestAccount_IsCodexCLIOnlyEnabled/OpenAI_OAuth_开启 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/OpenAI_OAuth_开启","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/OpenAI_OAuth_关闭"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/OpenAI_OAuth_关闭","Output":"=== RUN TestAccount_IsCodexCLIOnlyEnabled/OpenAI_OAuth_关闭\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/OpenAI_OAuth_关闭","Output":"--- PASS: TestAccount_IsCodexCLIOnlyEnabled/OpenAI_OAuth_关闭 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/OpenAI_OAuth_关闭","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/字段缺失默认关闭"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/字段缺失默认关闭","Output":"=== RUN TestAccount_IsCodexCLIOnlyEnabled/字段缺失默认关闭\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/字段缺失默认关闭","Output":"--- PASS: TestAccount_IsCodexCLIOnlyEnabled/字段缺失默认关闭 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/字段缺失默认关闭","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/类型非法默认关闭"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/类型非法默认关闭","Output":"=== RUN TestAccount_IsCodexCLIOnlyEnabled/类型非法默认关闭\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/类型非法默认关闭","Output":"--- PASS: TestAccount_IsCodexCLIOnlyEnabled/类型非法默认关闭 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/类型非法默认关闭","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/非_OAuth_账号始终关闭"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/非_OAuth_账号始终关闭","Output":"=== RUN TestAccount_IsCodexCLIOnlyEnabled/非_OAuth_账号始终关闭\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/非_OAuth_账号始终关闭","Output":"--- PASS: TestAccount_IsCodexCLIOnlyEnabled/非_OAuth_账号始终关闭 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/非_OAuth_账号始终关闭","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled","Output":"--- PASS: TestAccount_IsCodexCLIOnlyEnabled (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled","Output":"=== RUN TestAccount_IsOpenAIResponsesWebSocketV2Enabled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/OAuth使用OAuth专用开关"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/OAuth使用OAuth专用开关","Output":"=== RUN TestAccount_IsOpenAIResponsesWebSocketV2Enabled/OAuth使用OAuth专用开关\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/OAuth使用OAuth专用开关","Output":"--- PASS: TestAccount_IsOpenAIResponsesWebSocketV2Enabled/OAuth使用OAuth专用开关 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/OAuth使用OAuth专用开关","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/API_Key使用API_Key专用开关"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/API_Key使用API_Key专用开关","Output":"=== RUN TestAccount_IsOpenAIResponsesWebSocketV2Enabled/API_Key使用API_Key专用开关\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/API_Key使用API_Key专用开关","Output":"--- PASS: TestAccount_IsOpenAIResponsesWebSocketV2Enabled/API_Key使用API_Key专用开关 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/API_Key使用API_Key专用开关","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/OAuth账号不会读取API_Key专用开关"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/OAuth账号不会读取API_Key专用开关","Output":"=== RUN TestAccount_IsOpenAIResponsesWebSocketV2Enabled/OAuth账号不会读取API_Key专用开关\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/OAuth账号不会读取API_Key专用开关","Output":"--- PASS: TestAccount_IsOpenAIResponsesWebSocketV2Enabled/OAuth账号不会读取API_Key专用开关 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/OAuth账号不会读取API_Key专用开关","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/分类型新键优先于兼容键"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/分类型新键优先于兼容键","Output":"=== RUN TestAccount_IsOpenAIResponsesWebSocketV2Enabled/分类型新键优先于兼容键\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/分类型新键优先于兼容键","Output":"--- PASS: TestAccount_IsOpenAIResponsesWebSocketV2Enabled/分类型新键优先于兼容键 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/分类型新键优先于兼容键","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/分类型键缺失时回退兼容键"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/分类型键缺失时回退兼容键","Output":"=== RUN TestAccount_IsOpenAIResponsesWebSocketV2Enabled/分类型键缺失时回退兼容键\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/分类型键缺失时回退兼容键","Output":"--- PASS: TestAccount_IsOpenAIResponsesWebSocketV2Enabled/分类型键缺失时回退兼容键 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/分类型键缺失时回退兼容键","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/非OpenAI账号默认关闭"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/非OpenAI账号默认关闭","Output":"=== RUN TestAccount_IsOpenAIResponsesWebSocketV2Enabled/非OpenAI账号默认关闭\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/非OpenAI账号默认关闭","Output":"--- PASS: TestAccount_IsOpenAIResponsesWebSocketV2Enabled/非OpenAI账号默认关闭 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/非OpenAI账号默认关闭","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled","Output":"--- PASS: TestAccount_IsOpenAIResponsesWebSocketV2Enabled (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode","Output":"=== RUN TestAccount_ResolveOpenAIResponsesWebSocketV2Mode\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/default_fallback_to_ctx_pool"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/default_fallback_to_ctx_pool","Output":"=== RUN TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/default_fallback_to_ctx_pool\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/default_fallback_to_ctx_pool","Output":"--- PASS: TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/default_fallback_to_ctx_pool (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/default_fallback_to_ctx_pool","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/oauth_mode_field_has_highest_priority"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/oauth_mode_field_has_highest_priority","Output":"=== RUN TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/oauth_mode_field_has_highest_priority\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/oauth_mode_field_has_highest_priority","Output":"--- PASS: TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/oauth_mode_field_has_highest_priority (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/oauth_mode_field_has_highest_priority","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/oauth_mode_supports_http_bridge"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/oauth_mode_supports_http_bridge","Output":"=== RUN TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/oauth_mode_supports_http_bridge\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/oauth_mode_supports_http_bridge","Output":"--- PASS: TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/oauth_mode_supports_http_bridge (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/oauth_mode_supports_http_bridge","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/legacy_enabled_maps_to_ctx_pool"}
- {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/legacy_enabled_maps_to_ctx_pool","Output":"=== RUN TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/legacy_enabled_maps_to_ctx_pool\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/legacy_enabled_maps_to_ctx_pool","Output":"--- PASS: TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/legacy_enabled_maps_to_ctx_pool (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/legacy_enabled_maps_to_ctx_pool","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/shared/dedicated_mode_strings_are_compatible_with_ctx_pool"}
- {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/shared/dedicated_mode_strings_are_compatible_with_ctx_pool","Output":"=== RUN TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/shared/dedicated_mode_strings_are_compatible_with_ctx_pool\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/shared/dedicated_mode_strings_are_compatible_with_ctx_pool","Output":"--- PASS: TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/shared/dedicated_mode_strings_are_compatible_with_ctx_pool (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/shared/dedicated_mode_strings_are_compatible_with_ctx_pool","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/legacy_disabled_maps_to_off"}
- {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/legacy_disabled_maps_to_off","Output":"=== RUN TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/legacy_disabled_maps_to_off\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/legacy_disabled_maps_to_off","Output":"--- PASS: TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/legacy_disabled_maps_to_off (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/legacy_disabled_maps_to_off","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/non_openai_always_off"}
- {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/non_openai_always_off","Output":"=== RUN TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/non_openai_always_off\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/non_openai_always_off","Output":"--- PASS: TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/non_openai_always_off (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/non_openai_always_off","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode","Output":"--- PASS: TestAccount_ResolveOpenAIResponsesWebSocketV2Mode (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_OpenAIWSExtraFlags"}
- {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_OpenAIWSExtraFlags","Output":"=== RUN TestAccount_OpenAIWSExtraFlags\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_OpenAIWSExtraFlags","Output":"--- PASS: TestAccount_OpenAIWSExtraFlags (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_OpenAIWSExtraFlags","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHydrationResolvesRandomProxyWithoutSnapshot"}
- {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHydrationResolvesRandomProxyWithoutSnapshot","Output":"=== RUN TestOpenAIHydrationResolvesRandomProxyWithoutSnapshot\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHydrationResolvesRandomProxyWithoutSnapshot","Output":"--- PASS: TestOpenAIHydrationResolvesRandomProxyWithoutSnapshot (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHydrationResolvesRandomProxyWithoutSnapshot","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIAccountModelsOAuthPopulatesPickerFields"}
- {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIAccountModelsOAuthPopulatesPickerFields","Output":"=== RUN TestFetchOpenAIAccountModelsOAuthPopulatesPickerFields\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9391043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIAccountModelsOAuthPopulatesPickerFields","Output":"--- PASS: TestFetchOpenAIAccountModelsOAuthPopulatesPickerFields (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9391043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIAccountModelsOAuthPopulatesPickerFields","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9391043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIAccountModelsAPIKeyPopulatesPickerFields"}
- {"Time":"2026-09-12T11:38:28.9391043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIAccountModelsAPIKeyPopulatesPickerFields","Output":"=== RUN TestFetchOpenAIAccountModelsAPIKeyPopulatesPickerFields\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9391043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIAccountModelsAPIKeyPopulatesPickerFields","Output":"--- PASS: TestFetchOpenAIAccountModelsAPIKeyPopulatesPickerFields (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9391043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIAccountModelsAPIKeyPopulatesPickerFields","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9391043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIAccountModelsPreservesEmptyCatalog"}
- {"Time":"2026-09-12T11:38:28.9391043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIAccountModelsPreservesEmptyCatalog","Output":"=== RUN TestFetchOpenAIAccountModelsPreservesEmptyCatalog\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9391043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIAccountModelsPreservesEmptyCatalog","Output":"--- PASS: TestFetchOpenAIAccountModelsPreservesEmptyCatalog (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9391043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIAccountModelsPreservesEmptyCatalog","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9391043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIAccountModelsOAuthRespectsImageAllowlist"}
- {"Time":"2026-09-12T11:38:28.9391043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIAccountModelsOAuthRespectsImageAllowlist","Output":"=== RUN TestFetchOpenAIAccountModelsOAuthRespectsImageAllowlist\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9396156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIAccountModelsOAuthRespectsImageAllowlist","Output":"--- PASS: TestFetchOpenAIAccountModelsOAuthRespectsImageAllowlist (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9396156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIAccountModelsOAuthRespectsImageAllowlist","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9396156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactOAuthSuccessPersistsSupport"}
- {"Time":"2026-09-12T11:38:28.9396156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactOAuthSuccessPersistsSupport","Output":"=== RUN TestAccountTestService_TestAccountConnection_OpenAICompactOAuthSuccessPersistsSupport\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactOAuthSuccessPersistsSupport","Output":"--- PASS: TestAccountTestService_TestAccountConnection_OpenAICompactOAuthSuccessPersistsSupport (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactOAuthSuccessPersistsSupport","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactOAuth404MarksUnsupported"}
- {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactOAuth404MarksUnsupported","Output":"=== RUN TestAccountTestService_TestAccountConnection_OpenAICompactOAuth404MarksUnsupported\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactOAuth404MarksUnsupported","Output":"2026/09/12 03:38:28 Account test error: API returned 404: 404 page not found\n"}
- {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactOAuth404MarksUnsupported","Output":"--- PASS: TestAccountTestService_TestAccountConnection_OpenAICompactOAuth404MarksUnsupported (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactOAuth404MarksUnsupported","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactAPIKeyUsesNativeResponsesPath"}
- {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactAPIKeyUsesNativeResponsesPath","Output":"=== RUN TestAccountTestService_TestAccountConnection_OpenAICompactAPIKeyUsesNativeResponsesPath\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactAPIKeyUsesNativeResponsesPath","Output":"--- PASS: TestAccountTestService_TestAccountConnection_OpenAICompactAPIKeyUsesNativeResponsesPath (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactAPIKeyUsesNativeResponsesPath","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactAPIKeyDefaultBaseURLUsesResponsesPath"}
- {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactAPIKeyDefaultBaseURLUsesResponsesPath","Output":"=== RUN TestAccountTestService_TestAccountConnection_OpenAICompactAPIKeyDefaultBaseURLUsesResponsesPath\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactAPIKeyDefaultBaseURLUsesResponsesPath","Output":"--- PASS: TestAccountTestService_TestAccountConnection_OpenAICompactAPIKeyDefaultBaseURLUsesResponsesPath (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactAPIKeyDefaultBaseURLUsesResponsesPath","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompact2xxWithoutItemMarksUnsupported"}
- {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompact2xxWithoutItemMarksUnsupported","Output":"=== RUN TestAccountTestService_TestAccountConnection_OpenAICompact2xxWithoutItemMarksUnsupported\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompact2xxWithoutItemMarksUnsupported","Output":"2026/09/12 03:38:28 Account test error: Upstream returned 2xx without a compaction output item (native remote compaction v2 unsupported on this chain)\n"}
- {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompact2xxWithoutItemMarksUnsupported","Output":"--- PASS: TestAccountTestService_TestAccountConnection_OpenAICompact2xxWithoutItemMarksUnsupported (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompact2xxWithoutItemMarksUnsupported","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactProbeIdentityMatchesRealTraffic"}
- {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactProbeIdentityMatchesRealTraffic","Output":"=== RUN TestAccountTestService_TestAccountConnection_OpenAICompactProbeIdentityMatchesRealTraffic\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactProbeIdentityMatchesRealTraffic","Output":"--- PASS: TestAccountTestService_TestAccountConnection_OpenAICompactProbeIdentityMatchesRealTraffic (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactProbeIdentityMatchesRealTraffic","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_OpenAIImageOAuthHandlesOutputItemDoneFallback"}
- {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_OpenAIImageOAuthHandlesOutputItemDoneFallback","Output":"=== RUN TestAccountTestService_OpenAIImageOAuthHandlesOutputItemDoneFallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_OpenAIImageOAuthHandlesOutputItemDoneFallback","Output":"--- PASS: TestAccountTestService_OpenAIImageOAuthHandlesOutputItemDoneFallback (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_OpenAIImageOAuthHandlesOutputItemDoneFallback","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_OpenAIImageAPIKeyUsesConfiguredV1BaseURL"}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_OpenAIImageAPIKeyUsesConfiguredV1BaseURL","Output":"=== RUN TestAccountTestService_OpenAIImageAPIKeyUsesConfiguredV1BaseURL\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_OpenAIImageAPIKeyUsesConfiguredV1BaseURL","Output":"--- PASS: TestAccountTestService_OpenAIImageAPIKeyUsesConfiguredV1BaseURL (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_OpenAIImageAPIKeyUsesConfiguredV1BaseURL","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_OpenAIImageOAuthSurfacesSSEError"}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_OpenAIImageOAuthSurfacesSSEError","Output":"=== RUN TestAccountTestService_OpenAIImageOAuthSurfacesSSEError\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_OpenAIImageOAuthSurfacesSSEError","Output":"2026/09/12 03:38:28 Account test error: The selected image model is unavailable\n"}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_OpenAIImageOAuthSurfacesSSEError","Output":"--- PASS: TestAccountTestService_OpenAIImageOAuthSurfacesSSEError (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_OpenAIImageOAuthSurfacesSSEError","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIUsage_SparkShadow_WritesExtraAndReturnsNonEmptyWindows"}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIUsage_SparkShadow_WritesExtraAndReturnsNonEmptyWindows","Output":"=== RUN TestGetOpenAIUsage_SparkShadow_WritesExtraAndReturnsNonEmptyWindows\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIUsage_SparkShadow_WritesExtraAndReturnsNonEmptyWindows","Output":"=== PAUSE TestGetOpenAIUsage_SparkShadow_WritesExtraAndReturnsNonEmptyWindows\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIUsage_SparkShadow_WritesExtraAndReturnsNonEmptyWindows"}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot"}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot","Output":"=== RUN TestShouldRefreshOpenAICodexSnapshot\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot","Output":"=== PAUSE TestShouldRefreshOpenAICodexSnapshot\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot"}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot_SparkShadowIgnoresWSv2"}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot_SparkShadowIgnoresWSv2","Output":"=== RUN TestShouldRefreshOpenAICodexSnapshot_SparkShadowIgnoresWSv2\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot_SparkShadowIgnoresWSv2","Output":"=== PAUSE TestShouldRefreshOpenAICodexSnapshot_SparkShadowIgnoresWSv2\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot_SparkShadowIgnoresWSv2"}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAICodexProbeUpdatesAccepts429WithCodexHeaders"}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAICodexProbeUpdatesAccepts429WithCodexHeaders","Output":"=== RUN TestExtractOpenAICodexProbeUpdatesAccepts429WithCodexHeaders\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAICodexProbeUpdatesAccepts429WithCodexHeaders","Output":"=== PAUSE TestExtractOpenAICodexProbeUpdatesAccepts429WithCodexHeaders\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAICodexProbeUpdatesAccepts429WithCodexHeaders"}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_PersistOpenAICodexProbeSnapshotOnlyUpdatesExtra"}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_PersistOpenAICodexProbeSnapshotOnlyUpdatesExtra","Output":"=== RUN TestAccountUsageService_PersistOpenAICodexProbeSnapshotOnlyUpdatesExtra\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_PersistOpenAICodexProbeSnapshotOnlyUpdatesExtra","Output":"=== PAUSE TestAccountUsageService_PersistOpenAICodexProbeSnapshotOnlyUpdatesExtra\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_PersistOpenAICodexProbeSnapshotOnlyUpdatesExtra"}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_GetOpenAIUsage_DoesNotPromoteCodexExtraToRateLimit"}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_GetOpenAIUsage_DoesNotPromoteCodexExtraToRateLimit","Output":"=== RUN TestAccountUsageService_GetOpenAIUsage_DoesNotPromoteCodexExtraToRateLimit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_GetOpenAIUsage_DoesNotPromoteCodexExtraToRateLimit","Output":"=== PAUSE TestAccountUsageService_GetOpenAIUsage_DoesNotPromoteCodexExtraToRateLimit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_GetOpenAIUsage_DoesNotPromoteCodexExtraToRateLimit"}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow"}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow","Output":"=== RUN TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow","Output":"=== PAUSE TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow"}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeAnthropicBridge_OllamaCloudBearer"}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeAnthropicBridge_OllamaCloudBearer","Output":"=== RUN TestOpenAIGatewayService_NativeAnthropicBridge_OllamaCloudBearer\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeAnthropicBridge_OllamaCloudBearer","Output":"--- PASS: TestOpenAIGatewayService_NativeAnthropicBridge_OllamaCloudBearer (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeAnthropicBridge_OllamaCloudBearer","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAPIKeyAuthSnapshotGroupCodexModelsManifestRoundtrip"}
- {"Time":"2026-09-12T11:38:28.9411378+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAPIKeyAuthSnapshotGroupCodexModelsManifestRoundtrip","Output":"=== RUN TestAPIKeyAuthSnapshotGroupCodexModelsManifestRoundtrip\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9411378+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAPIKeyAuthSnapshotGroupCodexModelsManifestRoundtrip","Output":"--- PASS: TestAPIKeyAuthSnapshotGroupCodexModelsManifestRoundtrip (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9411378+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAPIKeyAuthSnapshotGroupCodexModelsManifestRoundtrip","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9411378+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAPIKeyAuthSnapshotGroupForceOpenAIFastRoundtrip"}
- {"Time":"2026-09-12T11:38:28.9411378+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAPIKeyAuthSnapshotGroupForceOpenAIFastRoundtrip","Output":"=== RUN TestAPIKeyAuthSnapshotGroupForceOpenAIFastRoundtrip\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9411378+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAPIKeyAuthSnapshotGroupForceOpenAIFastRoundtrip","Output":"--- PASS: TestAPIKeyAuthSnapshotGroupForceOpenAIFastRoundtrip (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9411378+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAPIKeyAuthSnapshotGroupForceOpenAIFastRoundtrip","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIChatAgentToolLoopSkipsAudit"}
- {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIChatAgentToolLoopSkipsAudit","Output":"=== RUN TestExtractContentModerationInput_OpenAIChatAgentToolLoopSkipsAudit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIChatAgentToolLoopSkipsAudit","Output":"--- PASS: TestExtractContentModerationInput_OpenAIChatAgentToolLoopSkipsAudit (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIChatAgentToolLoopSkipsAudit","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIChatMultiTurnExtractsLatestUser"}
- {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIChatMultiTurnExtractsLatestUser","Output":"=== RUN TestExtractContentModerationInput_OpenAIChatMultiTurnExtractsLatestUser\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIChatMultiTurnExtractsLatestUser","Output":"--- PASS: TestExtractContentModerationInput_OpenAIChatMultiTurnExtractsLatestUser (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIChatMultiTurnExtractsLatestUser","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIChatUsesLastUserMessage"}
- {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIChatUsesLastUserMessage","Output":"=== RUN TestExtractContentModerationInput_OpenAIChatUsesLastUserMessage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIChatUsesLastUserMessage","Output":"--- PASS: TestExtractContentModerationInput_OpenAIChatUsesLastUserMessage (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIChatUsesLastUserMessage","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIImagesIncludesPromptAndImages"}
- {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIImagesIncludesPromptAndImages","Output":"=== RUN TestExtractContentModerationInput_OpenAIImagesIncludesPromptAndImages\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIImagesIncludesPromptAndImages","Output":"--- PASS: TestExtractContentModerationInput_OpenAIImagesIncludesPromptAndImages (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIImagesIncludesPromptAndImages","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIResponsesCodexPayloadUsesLastUserMessage"}
- {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIResponsesCodexPayloadUsesLastUserMessage","Output":"=== RUN TestExtractContentModerationInput_OpenAIResponsesCodexPayloadUsesLastUserMessage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIResponsesCodexPayloadUsesLastUserMessage","Output":"--- PASS: TestExtractContentModerationInput_OpenAIResponsesCodexPayloadUsesLastUserMessage (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIResponsesCodexPayloadUsesLastUserMessage","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_OpenAIResponsesRecordsNonHitForCodexPayload"}
- {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_OpenAIResponsesRecordsNonHitForCodexPayload","Output":"=== RUN TestContentModerationCheck_OpenAIResponsesRecordsNonHitForCodexPayload\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9530086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_OpenAIResponsesRecordsNonHitForCodexPayload","Output":"2026/09/12 03:38:28 INFO content_moderation.config_loaded user_id=1001 api_key_id=0 group_id=0 group_name=\"\" endpoint=/responses provider=openai protocol=openai_responses model=gpt-5.5 enabled=true mode=pre_block all_groups=true configured_group_ids=[] in_group_scope=true model_filter_type=all configured_models=[] in_model_scope=true sample_rate=100 api_key_count=1 pre_hash_check_enabled=false record_non_hits=true\n"}
- {"Time":"2026-09-12T11:38:28.9537776+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_OpenAIResponsesRecordsNonHitForCodexPayload","Output":"2026/09/12 03:38:28 INFO content_moderation.input_extracted user_id=1001 api_key_id=0 group_id=0 endpoint=/responses protocol=openai_responses text_runes=16 image_count=0\n"}
- {"Time":"2026-09-12T11:38:28.9542803+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_OpenAIResponsesRecordsNonHitForCodexPayload","Output":"2026/09/12 03:38:28 INFO content_moderation.audit_result user_id=1001 api_key_id=0 group_id=0 group_name=\"\" endpoint=/responses protocol=openai_responses mode=pre_block allow_block=true flagged=false blocked=false action=allow highest_category=sexual highest_score=0.01 latency_ms=1 queue_delay_ms=\u003cnil\u003e\n"}
- {"Time":"2026-09-12T11:38:28.9542803+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_OpenAIResponsesRecordsNonHitForCodexPayload","Output":"--- PASS: TestContentModerationCheck_OpenAIResponsesRecordsNonHitForCodexPayload (0.01s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9542803+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_OpenAIResponsesRecordsNonHitForCodexPayload","Elapsed":0.01}
- {"Time":"2026-09-12T11:38:28.9542803+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_PreBlockBlocksCodexResponsesLatestUserInput"}
- {"Time":"2026-09-12T11:38:28.9542803+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_PreBlockBlocksCodexResponsesLatestUserInput","Output":"=== RUN TestContentModerationCheck_PreBlockBlocksCodexResponsesLatestUserInput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9547925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_PreBlockBlocksCodexResponsesLatestUserInput","Output":"2026/09/12 03:38:28 INFO content_moderation.config_loaded user_id=1001 api_key_id=0 group_id=0 group_name=\"\" endpoint=/responses provider=openai protocol=openai_responses model=gpt-5.5 enabled=true mode=pre_block all_groups=true configured_group_ids=[] in_group_scope=true model_filter_type=all configured_models=[] in_model_scope=true sample_rate=100 api_key_count=1 pre_hash_check_enabled=false record_non_hits=false\n"}
- {"Time":"2026-09-12T11:38:28.9547925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_PreBlockBlocksCodexResponsesLatestUserInput","Output":"2026/09/12 03:38:28 INFO content_moderation.input_extracted user_id=1001 api_key_id=0 group_id=0 endpoint=/responses protocol=openai_responses text_runes=21 image_count=0\n"}
- {"Time":"2026-09-12T11:38:28.955326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_PreBlockBlocksCodexResponsesLatestUserInput","Output":"2026/09/12 03:38:28 INFO content_moderation.audit_result user_id=1001 api_key_id=0 group_id=0 group_name=\"\" endpoint=/responses protocol=openai_responses mode=pre_block allow_block=true flagged=true blocked=true action=block highest_category=sexual highest_score=0.9 latency_ms=0 queue_delay_ms=\u003cnil\u003e\n"}
- {"Time":"2026-09-12T11:38:28.9659002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_PreBlockBlocksCodexResponsesLatestUserInput","Output":"--- PASS: TestContentModerationCheck_PreBlockBlocksCodexResponsesLatestUserInput (0.01s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9659002+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_PreBlockBlocksCodexResponsesLatestUserInput","Elapsed":0.01}
- {"Time":"2026-09-12T11:38:28.9659002+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHandleErrorResponse_NoRuleKeepsDefault"}
- {"Time":"2026-09-12T11:38:28.9659002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHandleErrorResponse_NoRuleKeepsDefault","Output":"=== RUN TestOpenAIHandleErrorResponse_NoRuleKeepsDefault\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9659002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHandleErrorResponse_NoRuleKeepsDefault","Output":"--- PASS: TestOpenAIHandleErrorResponse_NoRuleKeepsDefault (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHandleErrorResponse_NoRuleKeepsDefault","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHandleErrorResponse_ContextWindow502KeepsMessageWithoutFailover"}
- {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHandleErrorResponse_ContextWindow502KeepsMessageWithoutFailover","Output":"=== RUN TestOpenAIHandleErrorResponse_ContextWindow502KeepsMessageWithoutFailover\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHandleErrorResponse_ContextWindow502KeepsMessageWithoutFailover","Output":"--- PASS: TestOpenAIHandleErrorResponse_ContextWindow502KeepsMessageWithoutFailover (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHandleErrorResponse_ContextWindow502KeepsMessageWithoutFailover","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHandleErrorResponse_AppliesRuleFor422"}
- {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHandleErrorResponse_AppliesRuleFor422","Output":"=== RUN TestOpenAIHandleErrorResponse_AppliesRuleFor422\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHandleErrorResponse_AppliesRuleFor422","Output":"--- PASS: TestOpenAIHandleErrorResponse_AppliesRuleFor422 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHandleErrorResponse_AppliesRuleFor422","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHandleErrorResponse_SetsResponseCommitted"}
- {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHandleErrorResponse_SetsResponseCommitted","Output":"=== RUN TestOpenAIHandleErrorResponse_SetsResponseCommitted\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHandleErrorResponse_SetsResponseCommitted","Output":"--- PASS: TestOpenAIHandleErrorResponse_SetsResponseCommitted (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHandleErrorResponse_SetsResponseCommitted","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback"}
- {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback","Output":"=== RUN TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback/passthrough_only_ignores_stale_mapping"}
- {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback/passthrough_only_ignores_stale_mapping","Output":"=== RUN TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback/passthrough_only_ignores_stale_mapping\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback/passthrough_only_ignores_stale_mapping","Output":"--- PASS: TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback/passthrough_only_ignores_stale_mapping (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback/passthrough_only_ignores_stale_mapping","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback/passthrough_wins_over_ordinary_account_mapping"}
- {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback/passthrough_wins_over_ordinary_account_mapping","Output":"=== RUN TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback/passthrough_wins_over_ordinary_account_mapping\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback/passthrough_wins_over_ordinary_account_mapping","Output":"--- PASS: TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback/passthrough_wins_over_ordinary_account_mapping (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback/passthrough_wins_over_ordinary_account_mapping","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback/ordinary_accounts_preserve_mapped_whitelist"}
- {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback/ordinary_accounts_preserve_mapped_whitelist","Output":"=== RUN TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback/ordinary_accounts_preserve_mapped_whitelist\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback/ordinary_accounts_preserve_mapped_whitelist","Output":"--- PASS: TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback/ordinary_accounts_preserve_mapped_whitelist (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback/ordinary_accounts_preserve_mapped_whitelist","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback","Output":"--- PASS: TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_GlobalListPreservesMappedModelsWithOpenAIPassthrough"}
- {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_GlobalListPreservesMappedModelsWithOpenAIPassthrough","Output":"=== RUN TestGetAvailableModels_GlobalListPreservesMappedModelsWithOpenAIPassthrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_GlobalListPreservesMappedModelsWithOpenAIPassthrough","Output":"--- PASS: TestGetAvailableModels_GlobalListPreservesMappedModelsWithOpenAIPassthrough (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_GlobalListPreservesMappedModelsWithOpenAIPassthrough","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9669324+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGeminiForwardAsChatCompletions_StreamsOpenAIChunksFromGeminiSSE"}
- {"Time":"2026-09-12T11:38:28.9669324+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGeminiForwardAsChatCompletions_StreamsOpenAIChunksFromGeminiSSE","Output":"=== RUN TestGeminiForwardAsChatCompletions_StreamsOpenAIChunksFromGeminiSSE\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9669324+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGeminiForwardAsChatCompletions_StreamsOpenAIChunksFromGeminiSSE","Output":"--- PASS: TestGeminiForwardAsChatCompletions_StreamsOpenAIChunksFromGeminiSSE (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9669324+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGeminiForwardAsChatCompletions_StreamsOpenAIChunksFromGeminiSSE","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyGrokImagineImageGeometryMapsOpenAISize"}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyGrokImagineImageGeometryMapsOpenAISize","Output":"=== RUN TestApplyGrokImagineImageGeometryMapsOpenAISize\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyGrokImagineImageGeometryMapsOpenAISize","Output":"=== PAUSE TestApplyGrokImagineImageGeometryMapsOpenAISize\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyGrokImagineImageGeometryMapsOpenAISize"}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithHTTPUpstreamProfile_OpenAI"}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithHTTPUpstreamProfile_OpenAI","Output":"=== RUN TestWithHTTPUpstreamProfile_OpenAI\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithHTTPUpstreamProfile_OpenAI","Output":"--- PASS: TestWithHTTPUpstreamProfile_OpenAI (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithHTTPUpstreamProfile_OpenAI","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations"}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations","Output":"=== RUN TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/top-level_image_gen_namespace_is_passive"}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/top-level_image_gen_namespace_is_passive","Output":"=== RUN TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/top-level_image_gen_namespace_is_passive\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/top-level_image_gen_namespace_is_passive","Output":"--- PASS: TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/top-level_image_gen_namespace_is_passive (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/top-level_image_gen_namespace_is_passive","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/responses_lite_additional_tools_image_gen_is_passive"}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/responses_lite_additional_tools_image_gen_is_passive","Output":"=== RUN TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/responses_lite_additional_tools_image_gen_is_passive\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/responses_lite_additional_tools_image_gen_is_passive","Output":"--- PASS: TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/responses_lite_additional_tools_image_gen_is_passive (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/responses_lite_additional_tools_image_gen_is_passive","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/legacy_adapter_flattened_image_gen_function_declaration_is_passive"}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/legacy_adapter_flattened_image_gen_function_declaration_is_passive","Output":"=== RUN TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/legacy_adapter_flattened_image_gen_function_declaration_is_passive\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/legacy_adapter_flattened_image_gen_function_declaration_is_passive","Output":"--- PASS: TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/legacy_adapter_flattened_image_gen_function_declaration_is_passive (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/legacy_adapter_flattened_image_gen_function_declaration_is_passive","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/native_image_generation_declaration_remains_explicit"}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/native_image_generation_declaration_remains_explicit","Output":"=== RUN TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/native_image_generation_declaration_remains_explicit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/native_image_generation_declaration_remains_explicit","Output":"--- PASS: TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/native_image_generation_declaration_remains_explicit (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/native_image_generation_declaration_remains_explicit","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/native_image_generation_tool_choice_is_explicit"}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/native_image_generation_tool_choice_is_explicit","Output":"=== RUN TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/native_image_generation_tool_choice_is_explicit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/native_image_generation_tool_choice_is_explicit","Output":"--- PASS: TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/native_image_generation_tool_choice_is_explicit (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/native_image_generation_tool_choice_is_explicit","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_gen_namespace_tool_choice_is_explicit"}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_gen_namespace_tool_choice_is_explicit","Output":"=== RUN TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_gen_namespace_tool_choice_is_explicit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_gen_namespace_tool_choice_is_explicit","Output":"--- PASS: TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_gen_namespace_tool_choice_is_explicit (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_gen_namespace_tool_choice_is_explicit","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/flattened_image_gen_function_tool_choice_is_explicit"}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/flattened_image_gen_function_tool_choice_is_explicit","Output":"=== RUN TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/flattened_image_gen_function_tool_choice_is_explicit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/flattened_image_gen_function_tool_choice_is_explicit","Output":"--- PASS: TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/flattened_image_gen_function_tool_choice_is_explicit (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/flattened_image_gen_function_tool_choice_is_explicit","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/wrapped_image_gen_function_tool_choice_is_explicit"}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/wrapped_image_gen_function_tool_choice_is_explicit","Output":"=== RUN TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/wrapped_image_gen_function_tool_choice_is_explicit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/wrapped_image_gen_function_tool_choice_is_explicit","Output":"--- PASS: TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/wrapped_image_gen_function_tool_choice_is_explicit (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/wrapped_image_gen_function_tool_choice_is_explicit","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/vision_input_is_not_image_generation"}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/vision_input_is_not_image_generation","Output":"=== RUN TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/vision_input_is_not_image_generation\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/vision_input_is_not_image_generation","Output":"--- PASS: TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/vision_input_is_not_image_generation (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/vision_input_is_not_image_generation","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/ordinary_function_declaration_is_not_image_generation"}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/ordinary_function_declaration_is_not_image_generation","Output":"=== RUN TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/ordinary_function_declaration_is_not_image_generation\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/ordinary_function_declaration_is_not_image_generation","Output":"--- PASS: TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/ordinary_function_declaration_is_not_image_generation (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/ordinary_function_declaration_is_not_image_generation","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_gen_function_call_history_is_not_current_intent"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_gen_function_call_history_is_not_current_intent","Output":"=== RUN TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_gen_function_call_history_is_not_current_intent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_gen_function_call_history_is_not_current_intent","Output":"--- PASS: TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_gen_function_call_history_is_not_current_intent (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_gen_function_call_history_is_not_current_intent","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_generation_call_history_is_not_current_intent"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_generation_call_history_is_not_current_intent","Output":"=== RUN TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_generation_call_history_is_not_current_intent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_generation_call_history_is_not_current_intent","Output":"--- PASS: TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_generation_call_history_is_not_current_intent (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_generation_call_history_is_not_current_intent","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations","Output":"--- PASS: TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigUsesCurrentBodyModel"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigUsesCurrentBodyModel","Output":"=== RUN TestResolveOpenAIResponsesImageBillingConfigUsesCurrentBodyModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigUsesCurrentBodyModel","Output":"--- PASS: TestResolveOpenAIResponsesImageBillingConfigUsesCurrentBodyModel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigUsesCurrentBodyModel","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigToolModelWins"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigToolModelWins","Output":"=== RUN TestResolveOpenAIResponsesImageBillingConfigToolModelWins\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigToolModelWins","Output":"--- PASS: TestResolveOpenAIResponsesImageBillingConfigToolModelWins (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigToolModelWins","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigFromBodyIgnoresUnrelatedLargeInput"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigFromBodyIgnoresUnrelatedLargeInput","Output":"=== RUN TestResolveOpenAIResponsesImageBillingConfigFromBodyIgnoresUnrelatedLargeInput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigFromBodyIgnoresUnrelatedLargeInput","Output":"--- PASS: TestResolveOpenAIResponsesImageBillingConfigFromBodyIgnoresUnrelatedLargeInput (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigFromBodyIgnoresUnrelatedLargeInput","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes","Output":"=== RUN TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/official_2k_landscape"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/official_2k_landscape","Output":"=== RUN TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/official_2k_landscape\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/official_2k_landscape","Output":"--- PASS: TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/official_2k_landscape (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/official_2k_landscape","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/official_4k_landscape"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/official_4k_landscape","Output":"=== RUN TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/official_4k_landscape\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/official_4k_landscape","Output":"--- PASS: TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/official_4k_landscape (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/official_4k_landscape","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/custom_valid_2k"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/custom_valid_2k","Output":"=== RUN TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/custom_valid_2k\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/custom_valid_2k","Output":"--- PASS: TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/custom_valid_2k (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/custom_valid_2k","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/default_image_tool_model_supports_flexible_size"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/default_image_tool_model_supports_flexible_size","Output":"=== RUN TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/default_image_tool_model_supports_flexible_size\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/default_image_tool_model_supports_flexible_size","Output":"--- PASS: TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/default_image_tool_model_supports_flexible_size (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/default_image_tool_model_supports_flexible_size","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/top_level_image_size_is_moved_into_billing"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/top_level_image_size_is_moved_into_billing","Output":"=== RUN TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/top_level_image_size_is_moved_into_billing\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/top_level_image_size_is_moved_into_billing","Output":"--- PASS: TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/top_level_image_size_is_moved_into_billing (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/top_level_image_size_is_moved_into_billing","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes","Output":"--- PASS: TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigDoesNotRejectUnknownSizes"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigDoesNotRejectUnknownSizes","Output":"=== RUN TestResolveOpenAIResponsesImageBillingConfigDoesNotRejectUnknownSizes\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigDoesNotRejectUnknownSizes","Output":"--- PASS: TestResolveOpenAIResponsesImageBillingConfigDoesNotRejectUnknownSizes (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigDoesNotRejectUnknownSizes","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterDeduplicatesFinalImages"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterDeduplicatesFinalImages","Output":"=== RUN TestOpenAIImageOutputCounterDeduplicatesFinalImages\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterDeduplicatesFinalImages","Output":"--- PASS: TestOpenAIImageOutputCounterDeduplicatesFinalImages (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterDeduplicatesFinalImages","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterCountsImagesAPIStreamShapes"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterCountsImagesAPIStreamShapes","Output":"=== RUN TestOpenAIImageOutputCounterCountsImagesAPIStreamShapes\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterCountsImagesAPIStreamShapes","Output":"--- PASS: TestOpenAIImageOutputCounterCountsImagesAPIStreamShapes (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterCountsImagesAPIStreamShapes","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterCountsMultilineSSEDataPayload"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterCountsMultilineSSEDataPayload","Output":"=== RUN TestOpenAIImageOutputCounterCountsMultilineSSEDataPayload\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterCountsMultilineSSEDataPayload","Output":"--- PASS: TestOpenAIImageOutputCounterCountsMultilineSSEDataPayload (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterCountsMultilineSSEDataPayload","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterCountsMultilineSSEBodyPayload"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterCountsMultilineSSEBodyPayload","Output":"=== RUN TestOpenAIImageOutputCounterCountsMultilineSSEBodyPayload\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterCountsMultilineSSEBodyPayload","Output":"--- PASS: TestOpenAIImageOutputCounterCountsMultilineSSEBodyPayload (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterCountsMultilineSSEBodyPayload","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterFallsBackForInvalidMultilineSSEBody"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterFallsBackForInvalidMultilineSSEBody","Output":"=== RUN TestOpenAIImageOutputCounterFallsBackForInvalidMultilineSSEBody\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterFallsBackForInvalidMultilineSSEBody","Output":"--- PASS: TestOpenAIImageOutputCounterFallsBackForInvalidMultilineSSEBody (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterFallsBackForInvalidMultilineSSEBody","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIResponseImageOutputSizesFromJSONBytes"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIResponseImageOutputSizesFromJSONBytes","Output":"=== RUN TestCollectOpenAIResponseImageOutputSizesFromJSONBytes\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIResponseImageOutputSizesFromJSONBytes","Output":"--- PASS: TestCollectOpenAIResponseImageOutputSizesFromJSONBytes (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIResponseImageOutputSizesFromJSONBytes","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIResponseImageOutputSizesFromImagesAPIData"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIResponseImageOutputSizesFromImagesAPIData","Output":"=== RUN TestCollectOpenAIResponseImageOutputSizesFromImagesAPIData\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIResponseImageOutputSizesFromImagesAPIData","Output":"--- PASS: TestCollectOpenAIResponseImageOutputSizesFromImagesAPIData (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIResponseImageOutputSizesFromImagesAPIData","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIImageOutputSizesFromSSEBody"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIImageOutputSizesFromSSEBody","Output":"=== RUN TestCollectOpenAIImageOutputSizesFromSSEBody\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIImageOutputSizesFromSSEBody","Output":"--- PASS: TestCollectOpenAIImageOutputSizesFromSSEBody (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIImageOutputSizesFromSSEBody","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_TextOnlyMessage"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_TextOnlyMessage","Output":"=== RUN TestOpenAIImageOutputCounter_TextOnlyMessage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_TextOnlyMessage","Output":"--- PASS: TestOpenAIImageOutputCounter_TextOnlyMessage (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_TextOnlyMessage","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_NestedSub2API_StandardResponse"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_NestedSub2API_StandardResponse","Output":"=== RUN TestOpenAIImageOutputCounter_NestedSub2API_StandardResponse\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_NestedSub2API_StandardResponse","Output":"--- PASS: TestOpenAIImageOutputCounter_NestedSub2API_StandardResponse (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_NestedSub2API_StandardResponse","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_JSONResponse_TextOnly"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_JSONResponse_TextOnly","Output":"=== RUN TestOpenAIImageOutputCounter_JSONResponse_TextOnly\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_JSONResponse_TextOnly","Output":"--- PASS: TestOpenAIImageOutputCounter_JSONResponse_TextOnly (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_JSONResponse_TextOnly","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_DataArray_FalsePositive"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_DataArray_FalsePositive","Output":"=== RUN TestOpenAIImageOutputCounter_DataArray_FalsePositive\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_DataArray_FalsePositive","Output":"--- PASS: TestOpenAIImageOutputCounter_DataArray_FalsePositive (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_DataArray_FalsePositive","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_JSONResponse_DataArray_FalsePositive"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_JSONResponse_DataArray_FalsePositive","Output":"=== RUN TestOpenAIImageOutputCounter_JSONResponse_DataArray_FalsePositive\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_JSONResponse_DataArray_FalsePositive","Output":"--- PASS: TestOpenAIImageOutputCounter_JSONResponse_DataArray_FalsePositive (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_JSONResponse_DataArray_FalsePositive","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_PassthroughSSEToJSON_Conversion"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_PassthroughSSEToJSON_Conversion","Output":"=== RUN TestOpenAIImageOutputCounter_PassthroughSSEToJSON_Conversion\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_PassthroughSSEToJSON_Conversion","Output":"--- PASS: TestOpenAIImageOutputCounter_PassthroughSSEToJSON_Conversion (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_PassthroughSSEToJSON_Conversion","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources","Output":"=== RUN TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/standard_response.done_event"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/standard_response.done_event","Output":"=== RUN TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/standard_response.done_event\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/standard_response.done_event","Output":" image_output_accounting_test.go:228: count=0 (maxDataCount=0, count=0)\n"}
- {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/standard_response.done_event","Output":"--- PASS: TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/standard_response.done_event (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/standard_response.done_event","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_null_data_field"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_null_data_field","Output":"=== RUN TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_null_data_field\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_null_data_field","Output":" image_output_accounting_test.go:228: count=0 (maxDataCount=0, count=0)\n"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_null_data_field","Output":"--- PASS: TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_null_data_field (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_null_data_field","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_empty_data_array"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_empty_data_array","Output":"=== RUN TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_empty_data_array\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_empty_data_array","Output":" image_output_accounting_test.go:228: count=0 (maxDataCount=0, count=0)\n"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_empty_data_array","Output":"--- PASS: TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_empty_data_array (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_empty_data_array","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_single-element_data_array"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_single-element_data_array","Output":"=== RUN TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_single-element_data_array\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_single-element_data_array","Output":" image_output_accounting_test.go:228: count=1 (maxDataCount=1, count=0)\n"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_single-element_data_array","Output":"--- PASS: TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_single-element_data_array (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_single-element_data_array","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/image_generation.completed_event_without_result"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/image_generation.completed_event_without_result","Output":"=== RUN TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/image_generation.completed_event_without_result\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/image_generation.completed_event_without_result","Output":" image_output_accounting_test.go:228: count=0 (maxDataCount=0, count=0)\n"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/image_generation.completed_event_without_result","Output":"--- PASS: TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/image_generation.completed_event_without_result (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/image_generation.completed_event_without_result","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/output_item_with_empty_type"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/output_item_with_empty_type","Output":"=== RUN TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/output_item_with_empty_type\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/output_item_with_empty_type","Output":" image_output_accounting_test.go:228: count=0 (maxDataCount=0, count=0)\n"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/output_item_with_empty_type","Output":"--- PASS: TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/output_item_with_empty_type (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/output_item_with_empty_type","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources","Output":"--- PASS: TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddJSONResponse_Exported"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddJSONResponse_Exported","Output":"=== RUN TestOpenAIImageOutputCounter_AddJSONResponse_Exported\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddJSONResponse_Exported/standard_/v1/responses_JSON_response"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddJSONResponse_Exported/standard_/v1/responses_JSON_response","Output":"=== RUN TestOpenAIImageOutputCounter_AddJSONResponse_Exported/standard_/v1/responses_JSON_response\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddJSONResponse_Exported/standard_/v1/responses_JSON_response","Output":" image_output_accounting_test.go:251: count=0\n"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddJSONResponse_Exported/standard_/v1/responses_JSON_response","Output":"--- PASS: TestOpenAIImageOutputCounter_AddJSONResponse_Exported/standard_/v1/responses_JSON_response (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddJSONResponse_Exported/standard_/v1/responses_JSON_response","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddJSONResponse_Exported/response_with_data_field_(like_/v1/images/generations)"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddJSONResponse_Exported/response_with_data_field_(like_/v1/images/generations)","Output":"=== RUN TestOpenAIImageOutputCounter_AddJSONResponse_Exported/response_with_data_field_(like_/v1/images/generations)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddJSONResponse_Exported/response_with_data_field_(like_/v1/images/generations)","Output":" image_output_accounting_test.go:251: count=1\n"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddJSONResponse_Exported/response_with_data_field_(like_/v1/images/generations)","Output":"--- PASS: TestOpenAIImageOutputCounter_AddJSONResponse_Exported/response_with_data_field_(like_/v1/images/generations) (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddJSONResponse_Exported/response_with_data_field_(like_/v1/images/generations)","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddJSONResponse_Exported","Output":"--- PASS: TestOpenAIImageOutputCounter_AddJSONResponse_Exported (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddJSONResponse_Exported","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeAnthropicUsageNormalizesKimiStreamForOpenAIBilling"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeAnthropicUsageNormalizesKimiStreamForOpenAIBilling","Output":"=== RUN TestMergeAnthropicUsageNormalizesKimiStreamForOpenAIBilling\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeAnthropicUsageNormalizesKimiStreamForOpenAIBilling","Output":"--- PASS: TestMergeAnthropicUsageNormalizesKimiStreamForOpenAIBilling (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeAnthropicUsageNormalizesKimiStreamForOpenAIBilling","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets","Output":"=== RUN TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets/GLM"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets/GLM","Output":"=== RUN TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets/GLM\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets/GLM","Output":"--- PASS: TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets/GLM (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets/GLM","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets/DeepSeek"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets/DeepSeek","Output":"=== RUN TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets/DeepSeek\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets/DeepSeek","Output":"--- PASS: TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets/DeepSeek (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets/DeepSeek","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets","Output":"--- PASS: TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError","Output":"=== RUN TestIsOpenAICodexPlanGatedModelError\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_codex_plan_gated_detail_payload"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_codex_plan_gated_detail_payload","Output":"=== RUN TestIsOpenAICodexPlanGatedModelError/400_codex_plan_gated_detail_payload\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_codex_plan_gated_detail_payload","Output":"--- PASS: TestIsOpenAICodexPlanGatedModelError/400_codex_plan_gated_detail_payload (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_codex_plan_gated_detail_payload","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_codex_plan_gated_error_message_payload"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_codex_plan_gated_error_message_payload","Output":"=== RUN TestIsOpenAICodexPlanGatedModelError/400_codex_plan_gated_error_message_payload\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_codex_plan_gated_error_message_payload","Output":"--- PASS: TestIsOpenAICodexPlanGatedModelError/400_codex_plan_gated_error_message_payload (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_codex_plan_gated_error_message_payload","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_unrelated_invalid_request_does_not_match"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_unrelated_invalid_request_does_not_match","Output":"=== RUN TestIsOpenAICodexPlanGatedModelError/400_unrelated_invalid_request_does_not_match\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_unrelated_invalid_request_does_not_match","Output":"--- PASS: TestIsOpenAICodexPlanGatedModelError/400_unrelated_invalid_request_does_not_match (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_unrelated_invalid_request_does_not_match","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/404_with_plan_gated_message_does_not_match"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/404_with_plan_gated_message_does_not_match","Output":"=== RUN TestIsOpenAICodexPlanGatedModelError/404_with_plan_gated_message_does_not_match\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/404_with_plan_gated_message_does_not_match","Output":"--- PASS: TestIsOpenAICodexPlanGatedModelError/404_with_plan_gated_message_does_not_match (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/404_with_plan_gated_message_does_not_match","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_empty_body_does_not_match"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_empty_body_does_not_match","Output":"=== RUN TestIsOpenAICodexPlanGatedModelError/400_empty_body_does_not_match\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_empty_body_does_not_match","Output":"--- PASS: TestIsOpenAICodexPlanGatedModelError/400_empty_body_does_not_match (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_empty_body_does_not_match","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError","Output":"--- PASS: TestIsOpenAICodexPlanGatedModelError (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400","Output":"=== RUN TestIsOpenAICompatibleModelNotFound400\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/structured_code"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/structured_code","Output":"=== RUN TestIsOpenAICompatibleModelNotFound400/structured_code\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/structured_code","Output":"--- PASS: TestIsOpenAICompatibleModelNotFound400/structured_code (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/structured_code","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/unknown_provider"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/unknown_provider","Output":"=== RUN TestIsOpenAICompatibleModelNotFound400/unknown_provider\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/unknown_provider","Output":"--- PASS: TestIsOpenAICompatibleModelNotFound400/unknown_provider (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/unknown_provider","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/model_not_found"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/model_not_found","Output":"=== RUN TestIsOpenAICompatibleModelNotFound400/model_not_found\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/model_not_found","Output":"--- PASS: TestIsOpenAICompatibleModelNotFound400/model_not_found (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/model_not_found","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/model_unsupported"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/model_unsupported","Output":"=== RUN TestIsOpenAICompatibleModelNotFound400/model_unsupported\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/model_unsupported","Output":"--- PASS: TestIsOpenAICompatibleModelNotFound400/model_unsupported (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/model_unsupported","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/plain_text_compatible_gateway"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/plain_text_compatible_gateway","Output":"=== RUN TestIsOpenAICompatibleModelNotFound400/plain_text_compatible_gateway\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/plain_text_compatible_gateway","Output":"--- PASS: TestIsOpenAICompatibleModelNotFound400/plain_text_compatible_gateway (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/plain_text_compatible_gateway","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/invalid_parameter_remains_terminal"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/invalid_parameter_remains_terminal","Output":"=== RUN TestIsOpenAICompatibleModelNotFound400/invalid_parameter_remains_terminal\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/invalid_parameter_remains_terminal","Output":"--- PASS: TestIsOpenAICompatibleModelNotFound400/invalid_parameter_remains_terminal (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/invalid_parameter_remains_terminal","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/structured_non-matching_code_overrides_model_not_found_message"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/structured_non-matching_code_overrides_model_not_found_message","Output":"=== RUN TestIsOpenAICompatibleModelNotFound400/structured_non-matching_code_overrides_model_not_found_message\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/structured_non-matching_code_overrides_model_not_found_message","Output":"--- PASS: TestIsOpenAICompatibleModelNotFound400/structured_non-matching_code_overrides_model_not_found_message (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/structured_non-matching_code_overrides_model_not_found_message","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/structured_non-matching_error_code_overrides_unsupported_message"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/structured_non-matching_error_code_overrides_unsupported_message","Output":"=== RUN TestIsOpenAICompatibleModelNotFound400/structured_non-matching_error_code_overrides_unsupported_message\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/structured_non-matching_error_code_overrides_unsupported_message","Output":"--- PASS: TestIsOpenAICompatibleModelNotFound400/structured_non-matching_error_code_overrides_unsupported_message (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/structured_non-matching_error_code_overrides_unsupported_message","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/echoed_phrase_is_ignored"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/echoed_phrase_is_ignored","Output":"=== RUN TestIsOpenAICompatibleModelNotFound400/echoed_phrase_is_ignored\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/echoed_phrase_is_ignored","Output":"--- PASS: TestIsOpenAICompatibleModelNotFound400/echoed_phrase_is_ignored (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/echoed_phrase_is_ignored","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400","Output":"--- PASS: TestIsOpenAICompatibleModelNotFound400 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsModelRateLimited_OpenAIImageGenerationIntentBlocksTextModelImageTool"}
- {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsModelRateLimited_OpenAIImageGenerationIntentBlocksTextModelImageTool","Output":"=== RUN TestIsModelRateLimited_OpenAIImageGenerationIntentBlocksTextModelImageTool\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsModelRateLimited_OpenAIImageGenerationIntentBlocksTextModelImageTool","Output":"--- PASS: TestIsModelRateLimited_OpenAIImageGenerationIntentBlocksTextModelImageTool (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsModelRateLimited_OpenAIImageGenerationIntentBlocksTextModelImageTool","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification","Output":"=== RUN TestOpenAIUpstreamAccessStateClassification\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/workspace_code"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/workspace_code","Output":"=== RUN TestOpenAIUpstreamAccessStateClassification/workspace_code\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/workspace_code","Output":"--- PASS: TestOpenAIUpstreamAccessStateClassification/workspace_code (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/workspace_code","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/disabled_account_message"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/disabled_account_message","Output":"=== RUN TestOpenAIUpstreamAccessStateClassification/disabled_account_message\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/disabled_account_message","Output":"--- PASS: TestOpenAIUpstreamAccessStateClassification/disabled_account_message (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/disabled_account_message","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/suspended_workspace_message"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/suspended_workspace_message","Output":"=== RUN TestOpenAIUpstreamAccessStateClassification/suspended_workspace_message\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/suspended_workspace_message","Output":"--- PASS: TestOpenAIUpstreamAccessStateClassification/suspended_workspace_message (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/suspended_workspace_message","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/deactivated_organization_message"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/deactivated_organization_message","Output":"=== RUN TestOpenAIUpstreamAccessStateClassification/deactivated_organization_message\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/deactivated_organization_message","Output":"--- PASS: TestOpenAIUpstreamAccessStateClassification/deactivated_organization_message (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/deactivated_organization_message","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/scalar_detail"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/scalar_detail","Output":"=== RUN TestOpenAIUpstreamAccessStateClassification/scalar_detail\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/scalar_detail","Output":"--- PASS: TestOpenAIUpstreamAccessStateClassification/scalar_detail (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/scalar_detail","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/suspended_org_code"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/suspended_org_code","Output":"=== RUN TestOpenAIUpstreamAccessStateClassification/suspended_org_code\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/suspended_org_code","Output":"--- PASS: TestOpenAIUpstreamAccessStateClassification/suspended_org_code (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/suspended_org_code","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification","Output":"--- PASS: TestOpenAIUpstreamAccessStateClassification (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateDoesNotScanEchoedJSON"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateDoesNotScanEchoedJSON","Output":"=== RUN TestOpenAIUpstreamAccessStateDoesNotScanEchoedJSON\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateDoesNotScanEchoedJSON","Output":"--- PASS: TestOpenAIUpstreamAccessStateDoesNotScanEchoedJSON (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateDoesNotScanEchoedJSON","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAccessStateDoesNotTrustBadRequestMessage"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAccessStateDoesNotTrustBadRequestMessage","Output":"=== RUN TestOpenAIHTTPAccessStateDoesNotTrustBadRequestMessage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAccessStateDoesNotTrustBadRequestMessage","Output":"--- PASS: TestOpenAIHTTPAccessStateDoesNotTrustBadRequestMessage (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAccessStateDoesNotTrustBadRequestMessage","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAccessStateBadRequestDoesNotDisableAccount"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAccessStateBadRequestDoesNotDisableAccount","Output":"=== RUN TestOpenAIHTTPAccessStateBadRequestDoesNotDisableAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAccessStateBadRequestDoesNotDisableAccount","Output":"--- PASS: TestOpenAIHTTPAccessStateBadRequestDoesNotDisableAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAccessStateBadRequestDoesNotDisableAccount","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEchoedAccessStateMessageDoesNotDisableOrFailover"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEchoedAccessStateMessageDoesNotDisableOrFailover","Output":"=== RUN TestOpenAIStreamEchoedAccessStateMessageDoesNotDisableOrFailover\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEchoedAccessStateMessageDoesNotDisableOrFailover","Output":"--- PASS: TestOpenAIStreamEchoedAccessStateMessageDoesNotDisableOrFailover (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEchoedAccessStateMessageDoesNotDisableOrFailover","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAccessStateTrustsStructuredCode"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAccessStateTrustsStructuredCode","Output":"=== RUN TestOpenAIHTTPAccessStateTrustsStructuredCode\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAccessStateTrustsStructuredCode","Output":"2026/09/12 03:38:28 WARN account_disabled_auth_error account_id=930 error=\"request rejected\"\n"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAccessStateTrustsStructuredCode","Output":"--- PASS: TestOpenAIHTTPAccessStateTrustsStructuredCode (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAccessStateTrustsStructuredCode","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies","Output":"=== RUN TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies/oauth_401_remains_recoverable"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies/oauth_401_remains_recoverable","Output":"=== RUN TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies/oauth_401_remains_recoverable\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies/oauth_401_remains_recoverable","Output":"--- PASS: TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies/oauth_401_remains_recoverable (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies/oauth_401_remains_recoverable","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies/403_uses_counter_cooldown"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies/403_uses_counter_cooldown","Output":"=== RUN TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies/403_uses_counter_cooldown\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies/403_uses_counter_cooldown","Output":"2026/09/12 03:38:28 [HandleUpstreamErrorRaw] account_id=932 platform=openai type=oauth status=403 request_id= cf_ray= upstream_msg=workspace has been suspended raw_body={\"error\":{\"message\":\"workspace has been suspended\"}}\n"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies/403_uses_counter_cooldown","Output":"2026/09/12 03:38:28 WARN openai_403_temp_unschedulable account_id=932 until=2026-09-12T03:48:28.968Z count=1 threshold=3\n"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies/403_uses_counter_cooldown","Output":"--- PASS: TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies/403_uses_counter_cooldown (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies/403_uses_counter_cooldown","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies","Output":"--- PASS: TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICyberPolicyWrapped5xxNeverFailsOver"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICyberPolicyWrapped5xxNeverFailsOver","Output":"=== RUN TestOpenAICyberPolicyWrapped5xxNeverFailsOver\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICyberPolicyWrapped5xxNeverFailsOver","Output":"--- PASS: TestOpenAICyberPolicyWrapped5xxNeverFailsOver (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICyberPolicyWrapped5xxNeverFailsOver","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICapacityFailoverCarriesSafeTerminalResponse"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICapacityFailoverCarriesSafeTerminalResponse","Output":"=== RUN TestOpenAICapacityFailoverCarriesSafeTerminalResponse\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICapacityFailoverCarriesSafeTerminalResponse","Output":"--- PASS: TestOpenAICapacityFailoverCarriesSafeTerminalResponse (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICapacityFailoverCarriesSafeTerminalResponse","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes","Output":"=== RUN TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/unauthorized"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/unauthorized","Output":"=== RUN TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/unauthorized\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/unauthorized","Output":"--- PASS: TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/unauthorized (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/unauthorized","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/forbidden"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/forbidden","Output":"=== RUN TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/forbidden\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/forbidden","Output":"--- PASS: TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/forbidden (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/forbidden","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/rate_limit"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/rate_limit","Output":"=== RUN TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/rate_limit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/rate_limit","Output":"--- PASS: TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/rate_limit (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/rate_limit","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/overload_529"}
- {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/overload_529","Output":"=== RUN TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/overload_529\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/overload_529","Output":"--- PASS: TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/overload_529 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/overload_529","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes","Output":"--- PASS: TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamBareErrorUsesSemanticFailover"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamBareErrorUsesSemanticFailover","Output":"=== RUN TestOpenAIStreamBareErrorUsesSemanticFailover\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamBareErrorUsesSemanticFailover","Output":"--- PASS: TestOpenAIStreamBareErrorUsesSemanticFailover (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamBareErrorUsesSemanticFailover","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal","Output":"=== RUN TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/ordinary_permission_error"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/ordinary_permission_error","Output":"=== RUN TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/ordinary_permission_error\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/ordinary_permission_error","Output":"--- PASS: TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/ordinary_permission_error (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/ordinary_permission_error","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/explicit_403_request_status"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/explicit_403_request_status","Output":"=== RUN TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/explicit_403_request_status\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/explicit_403_request_status","Output":"--- PASS: TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/explicit_403_request_status (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/explicit_403_request_status","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/structured_access_state"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/structured_access_state","Output":"=== RUN TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/structured_access_state\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/structured_access_state","Output":"--- PASS: TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/structured_access_state (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/structured_access_state","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/explicit_credential_auth_code"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/explicit_credential_auth_code","Output":"=== RUN TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/explicit_credential_auth_code\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/explicit_credential_auth_code","Output":"--- PASS: TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/explicit_credential_auth_code (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/explicit_credential_auth_code","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/explicit_authentication_type"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/explicit_authentication_type","Output":"=== RUN TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/explicit_authentication_type\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/explicit_authentication_type","Output":"--- PASS: TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/explicit_authentication_type (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/explicit_authentication_type","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal","Output":"--- PASS: TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403PostOutputAccountSideEffectsIgnoreRequestPermissionErrors"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403PostOutputAccountSideEffectsIgnoreRequestPermissionErrors","Output":"=== RUN TestOpenAIStream403PostOutputAccountSideEffectsIgnoreRequestPermissionErrors\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403PostOutputAccountSideEffectsIgnoreRequestPermissionErrors","Output":"--- PASS: TestOpenAIStream403PostOutputAccountSideEffectsIgnoreRequestPermissionErrors (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403PostOutputAccountSideEffectsIgnoreRequestPermissionErrors","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403ExplicitCredentialAuthAppliesAccountSideEffects"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403ExplicitCredentialAuthAppliesAccountSideEffects","Output":"=== RUN TestOpenAIStream403ExplicitCredentialAuthAppliesAccountSideEffects\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403ExplicitCredentialAuthAppliesAccountSideEffects","Output":"2026/09/12 03:38:28 [HandleUpstreamErrorRaw] account_id=917 platform=openai type=oauth status=403 request_id= cf_ray= upstream_msg=credential rejected raw_body={\"type\":\"error\",\"error\":{\"type\":\"permission_error\",\"code\":\"invalid_api_key\",\"status_code\":403,\"message\":\"credential rejected\"}}\n"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403ExplicitCredentialAuthAppliesAccountSideEffects","Output":"2026/09/12 03:38:28 WARN account_disabled_auth_error account_id=917 error=\"Access forbidden (403): credential rejected\"\n"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403ExplicitCredentialAuthAppliesAccountSideEffects","Output":"--- PASS: TestOpenAIStream403ExplicitCredentialAuthAppliesAccountSideEffects (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403ExplicitCredentialAuthAppliesAccountSideEffects","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStandaloneFailedStructured403AppliesAccountSideEffectsOnce"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStandaloneFailedStructured403AppliesAccountSideEffectsOnce","Output":"=== RUN TestOpenAIWSStandaloneFailedStructured403AppliesAccountSideEffectsOnce\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStandaloneFailedStructured403AppliesAccountSideEffectsOnce","Output":"2026/09/12 03:38:28 [HandleUpstreamErrorRaw] account_id=923 platform=openai type=oauth status=403 request_id= cf_ray= upstream_msg= raw_body={\"type\":\"response.failed\",\"response\":{\"error\":{\"type\":\"permission_error\",\"code\":\"invalid_api_key\",\"status_code\":403,\"message\":\"credential rejected\"}}}\n"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStandaloneFailedStructured403AppliesAccountSideEffectsOnce","Output":"2026/09/12 03:38:28 WARN account_disabled_auth_error account_id=923 error=\"Access forbidden (403): {\\\"type\\\":\\\"response.failed\\\",\\\"response\\\":{\\\"error\\\":{\\\"type\\\":\\\"permission_error\\\",\\\"code\\\":\\\"invalid_api_key\\\",\\\"status_code\\\":403,\\\"message\\\":\\\"credential rejected\\\"}}}\"\n"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStandaloneFailedStructured403AppliesAccountSideEffectsOnce","Output":"--- PASS: TestOpenAIWSStandaloneFailedStructured403AppliesAccountSideEffectsOnce (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStandaloneFailedStructured403AppliesAccountSideEffectsOnce","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPairedStructured403SideEffectsCanBeDeduplicated"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPairedStructured403SideEffectsCanBeDeduplicated","Output":"=== RUN TestOpenAIWSPairedStructured403SideEffectsCanBeDeduplicated\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPairedStructured403SideEffectsCanBeDeduplicated","Output":"2026/09/12 03:38:28 WARN account_disabled_auth_error account_id=924 error=\"workspace is suspended\"\n"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPairedStructured403SideEffectsCanBeDeduplicated","Output":"--- PASS: TestOpenAIWSPairedStructured403SideEffectsCanBeDeduplicated (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPairedStructured403SideEffectsCanBeDeduplicated","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamAccessStateAppliesAccountHealthBeforeFailover"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamAccessStateAppliesAccountHealthBeforeFailover","Output":"=== RUN TestOpenAIStreamAccessStateAppliesAccountHealthBeforeFailover\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamAccessStateAppliesAccountHealthBeforeFailover","Output":"--- PASS: TestOpenAIStreamAccessStateAppliesAccountHealthBeforeFailover (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamAccessStateAppliesAccountHealthBeforeFailover","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce","Output":"=== RUN TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce/native"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce/native","Output":"=== RUN TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce/native\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce/native","Output":"2026/09/12 03:38:28 WARN account_disabled_auth_error account_id=921 error=\"OpenAI upstream account or workspace is unavailable\"\n"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce/native","Output":"--- PASS: TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce/native (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce/native","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce/passthrough"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce/passthrough","Output":"=== RUN TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce/passthrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce/passthrough","Output":"2026/09/12 03:38:28 WARN account_disabled_auth_error account_id=922 error=\"OpenAI upstream account or workspace is unavailable\"\n"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce/passthrough","Output":"--- PASS: TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce/passthrough (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce/passthrough","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce","Output":"--- PASS: TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock","Output":"=== RUN TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock/oauth"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock/oauth","Output":"=== RUN TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock/oauth\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock/oauth","Output":"--- PASS: TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock/oauth (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock/oauth","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock/setup-token"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock/setup-token","Output":"=== RUN TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock/setup-token\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock/setup-token","Output":"--- PASS: TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock/setup-token (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock/setup-token","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock","Output":"--- PASS: TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_FirstFailureDoesNotCreateLongBlock"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_FirstFailureDoesNotCreateLongBlock","Output":"=== RUN TestOpenAIModelTransient_FirstFailureDoesNotCreateLongBlock\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_FirstFailureDoesNotCreateLongBlock","Output":"--- PASS: TestOpenAIModelTransient_FirstFailureDoesNotCreateLongBlock (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_FirstFailureDoesNotCreateLongBlock","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_SecondFailureCreatesShortModelBlock"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_SecondFailureCreatesShortModelBlock","Output":"=== RUN TestOpenAIModelTransient_SecondFailureCreatesShortModelBlock\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_SecondFailureCreatesShortModelBlock","Output":"--- PASS: TestOpenAIModelTransient_SecondFailureCreatesShortModelBlock (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_SecondFailureCreatesShortModelBlock","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_ThirdFailureCreatesFortyFiveSecondModelBlock"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_ThirdFailureCreatesFortyFiveSecondModelBlock","Output":"=== RUN TestOpenAIModelTransient_ThirdFailureCreatesFortyFiveSecondModelBlock\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_ThirdFailureCreatesFortyFiveSecondModelBlock","Output":"--- PASS: TestOpenAIModelTransient_ThirdFailureCreatesFortyFiveSecondModelBlock (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_ThirdFailureCreatesFortyFiveSecondModelBlock","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_BlockIsIsolatedByModel"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_BlockIsIsolatedByModel","Output":"=== RUN TestOpenAIModelTransient_BlockIsIsolatedByModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_BlockIsIsolatedByModel","Output":"--- PASS: TestOpenAIModelTransient_BlockIsIsolatedByModel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_BlockIsIsolatedByModel","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_SuccessClearsStreakAndBlock"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_SuccessClearsStreakAndBlock","Output":"=== RUN TestOpenAIModelTransient_SuccessClearsStreakAndBlock\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_SuccessClearsStreakAndBlock","Output":"--- PASS: TestOpenAIModelTransient_SuccessClearsStreakAndBlock (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_SuccessClearsStreakAndBlock","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_StaleStreakExpires"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_StaleStreakExpires","Output":"=== RUN TestOpenAIModelTransient_StaleStreakExpires\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_StaleStreakExpires","Output":"--- PASS: TestOpenAIModelTransient_StaleStreakExpires (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_StaleStreakExpires","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_StreakSurvivesSparseTraffic"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_StreakSurvivesSparseTraffic","Output":"=== RUN TestOpenAIModelTransient_StreakSurvivesSparseTraffic\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_StreakSurvivesSparseTraffic","Output":"--- PASS: TestOpenAIModelTransient_StreakSurvivesSparseTraffic (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_StreakSurvivesSparseTraffic","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_SuccessResetsStreakAcrossSparseTraffic"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_SuccessResetsStreakAcrossSparseTraffic","Output":"=== RUN TestOpenAIModelTransient_SuccessResetsStreakAcrossSparseTraffic\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_SuccessResetsStreakAcrossSparseTraffic","Output":"--- PASS: TestOpenAIModelTransient_SuccessResetsStreakAcrossSparseTraffic (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_SuccessResetsStreakAcrossSparseTraffic","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_IgnoresInvalidKeys"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_IgnoresInvalidKeys","Output":"=== RUN TestOpenAIModelTransient_IgnoresInvalidKeys\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_IgnoresInvalidKeys","Output":"--- PASS: TestOpenAIModelTransient_IgnoresInvalidKeys (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_IgnoresInvalidKeys","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_IgnoresOversizedModelKey"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_IgnoresOversizedModelKey","Output":"=== RUN TestOpenAIModelTransient_IgnoresOversizedModelKey\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_IgnoresOversizedModelKey","Output":"--- PASS: TestOpenAIModelTransient_IgnoresOversizedModelKey (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_IgnoresOversizedModelKey","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_StateIsBoundedAndConcurrencySafe"}
- {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_StateIsBoundedAndConcurrencySafe","Output":"=== RUN TestOpenAIModelTransient_StateIsBoundedAndConcurrencySafe\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_StateIsBoundedAndConcurrencySafe","Output":"--- PASS: TestOpenAIModelTransient_StateIsBoundedAndConcurrencySafe (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_StateIsBoundedAndConcurrencySafe","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_BlocksOnlyRequestedModel"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_BlocksOnlyRequestedModel","Output":"=== RUN TestHandleOpenAITransientError_BlocksOnlyRequestedModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_BlocksOnlyRequestedModel","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5105 status_code=502\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_BlocksOnlyRequestedModel","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5105 model=gpt-5.5 failure_streak=1 cooldown_ms=0 block_scope=account_model\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_BlocksOnlyRequestedModel","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5105 status_code=502\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_BlocksOnlyRequestedModel","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5105 model=gpt-5.5 failure_streak=2 cooldown_ms=10000 block_scope=account_model\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_BlocksOnlyRequestedModel","Output":"--- PASS: TestHandleOpenAITransientError_BlocksOnlyRequestedModel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_BlocksOnlyRequestedModel","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope","Output":"=== RUN TestHandleOpenAITransientError_TransientStatusesUseModelScope\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Internal_Server_Error"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Internal_Server_Error","Output":"=== RUN TestHandleOpenAITransientError_TransientStatusesUseModelScope/Internal_Server_Error\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Internal_Server_Error","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5600 status_code=500\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Internal_Server_Error","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5600 model=gpt-5.5 failure_streak=1 cooldown_ms=0 block_scope=account_model\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Internal_Server_Error","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5600 status_code=500\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Internal_Server_Error","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5600 model=gpt-5.5 failure_streak=2 cooldown_ms=10000 block_scope=account_model\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Internal_Server_Error","Output":"--- PASS: TestHandleOpenAITransientError_TransientStatusesUseModelScope/Internal_Server_Error (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Internal_Server_Error","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Bad_Gateway"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Bad_Gateway","Output":"=== RUN TestHandleOpenAITransientError_TransientStatusesUseModelScope/Bad_Gateway\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Bad_Gateway","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5602 status_code=502\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Bad_Gateway","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5602 model=gpt-5.5 failure_streak=1 cooldown_ms=0 block_scope=account_model\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Bad_Gateway","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5602 status_code=502\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Bad_Gateway","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5602 model=gpt-5.5 failure_streak=2 cooldown_ms=10000 block_scope=account_model\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Bad_Gateway","Output":"--- PASS: TestHandleOpenAITransientError_TransientStatusesUseModelScope/Bad_Gateway (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Bad_Gateway","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Service_Unavailable"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Service_Unavailable","Output":"=== RUN TestHandleOpenAITransientError_TransientStatusesUseModelScope/Service_Unavailable\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Service_Unavailable","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5603 status_code=503\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Service_Unavailable","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5603 model=gpt-5.5 failure_streak=1 cooldown_ms=0 block_scope=account_model\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Service_Unavailable","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5603 status_code=503\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Service_Unavailable","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5603 model=gpt-5.5 failure_streak=2 cooldown_ms=10000 block_scope=account_model\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Service_Unavailable","Output":"--- PASS: TestHandleOpenAITransientError_TransientStatusesUseModelScope/Service_Unavailable (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Service_Unavailable","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Gateway_Timeout"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Gateway_Timeout","Output":"=== RUN TestHandleOpenAITransientError_TransientStatusesUseModelScope/Gateway_Timeout\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Gateway_Timeout","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5604 status_code=504\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Gateway_Timeout","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5604 model=gpt-5.5 failure_streak=1 cooldown_ms=0 block_scope=account_model\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Gateway_Timeout","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5604 status_code=504\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Gateway_Timeout","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5604 model=gpt-5.5 failure_streak=2 cooldown_ms=10000 block_scope=account_model\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Gateway_Timeout","Output":"--- PASS: TestHandleOpenAITransientError_TransientStatusesUseModelScope/Gateway_Timeout (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Gateway_Timeout","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#00"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#00","Output":"=== RUN TestHandleOpenAITransientError_TransientStatusesUseModelScope/#00\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#00","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5620 status_code=520\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#00","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5620 model=gpt-5.5 failure_streak=1 cooldown_ms=0 block_scope=account_model\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#00","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5620 status_code=520\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#00","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5620 model=gpt-5.5 failure_streak=2 cooldown_ms=10000 block_scope=account_model\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#00","Output":"--- PASS: TestHandleOpenAITransientError_TransientStatusesUseModelScope/#00 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#00","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#01"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#01","Output":"=== RUN TestHandleOpenAITransientError_TransientStatusesUseModelScope/#01\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#01","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5621 status_code=521\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#01","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5621 model=gpt-5.5 failure_streak=1 cooldown_ms=0 block_scope=account_model\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#01","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5621 status_code=521\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#01","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5621 model=gpt-5.5 failure_streak=2 cooldown_ms=10000 block_scope=account_model\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#01","Output":"--- PASS: TestHandleOpenAITransientError_TransientStatusesUseModelScope/#01 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#01","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#02"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#02","Output":"=== RUN TestHandleOpenAITransientError_TransientStatusesUseModelScope/#02\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#02","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5622 status_code=522\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#02","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5622 model=gpt-5.5 failure_streak=1 cooldown_ms=0 block_scope=account_model\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#02","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5622 status_code=522\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#02","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5622 model=gpt-5.5 failure_streak=2 cooldown_ms=10000 block_scope=account_model\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#02","Output":"--- PASS: TestHandleOpenAITransientError_TransientStatusesUseModelScope/#02 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#02","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#03"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#03","Output":"=== RUN TestHandleOpenAITransientError_TransientStatusesUseModelScope/#03\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#03","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5623 status_code=523\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#03","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5623 model=gpt-5.5 failure_streak=1 cooldown_ms=0 block_scope=account_model\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#03","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5623 status_code=523\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#03","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5623 model=gpt-5.5 failure_streak=2 cooldown_ms=10000 block_scope=account_model\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#03","Output":"--- PASS: TestHandleOpenAITransientError_TransientStatusesUseModelScope/#03 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#03","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#04"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#04","Output":"=== RUN TestHandleOpenAITransientError_TransientStatusesUseModelScope/#04\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#04","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5624 status_code=524\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#04","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5624 model=gpt-5.5 failure_streak=1 cooldown_ms=0 block_scope=account_model\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#04","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5624 status_code=524\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#04","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5624 model=gpt-5.5 failure_streak=2 cooldown_ms=10000 block_scope=account_model\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#04","Output":"--- PASS: TestHandleOpenAITransientError_TransientStatusesUseModelScope/#04 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#04","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope","Output":"--- PASS: TestHandleOpenAITransientError_TransientStatusesUseModelScope (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_529RemainsOverloadOnly"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_529RemainsOverloadOnly","Output":"=== RUN TestHandleOpenAITransientError_529RemainsOverloadOnly\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_529RemainsOverloadOnly","Output":"--- PASS: TestHandleOpenAITransientError_529RemainsOverloadOnly (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_529RemainsOverloadOnly","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_CanonicalModelIsNotMappedTwice"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_CanonicalModelIsNotMappedTwice","Output":"=== RUN TestHandleOpenAITransientError_CanonicalModelIsNotMappedTwice\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_CanonicalModelIsNotMappedTwice","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5107 status_code=502\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_CanonicalModelIsNotMappedTwice","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5107 model=upstream-a failure_streak=1 cooldown_ms=0 block_scope=account_model\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_CanonicalModelIsNotMappedTwice","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5107 status_code=502\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_CanonicalModelIsNotMappedTwice","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5107 model=upstream-a failure_streak=2 cooldown_ms=10000 block_scope=account_model\n"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_CanonicalModelIsNotMappedTwice","Output":"--- PASS: TestHandleOpenAITransientError_CanonicalModelIsNotMappedTwice (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_CanonicalModelIsNotMappedTwice","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_DoesNotBlockParameter400"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_DoesNotBlockParameter400","Output":"=== RUN TestHandleOpenAITransientError_DoesNotBlockParameter400\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_DoesNotBlockParameter400","Output":"--- PASS: TestHandleOpenAITransientError_DoesNotBlockParameter400 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_DoesNotBlockParameter400","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_HardDisableStillBlocksWholeAccount"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_HardDisableStillBlocksWholeAccount","Output":"=== RUN TestHandleOpenAITransientError_HardDisableStillBlocksWholeAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_HardDisableStillBlocksWholeAccount","Output":"--- PASS: TestHandleOpenAITransientError_HardDisableStillBlocksWholeAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_HardDisableStillBlocksWholeAccount","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactPrefersSupportedOverUnknown"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactPrefersSupportedOverUnknown","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_CompactPrefersSupportedOverUnknown\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactPrefersSupportedOverUnknown","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_CompactPrefersSupportedOverUnknown (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactPrefersSupportedOverUnknown","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactRejectsExplicitlyUnsupported"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactRejectsExplicitlyUnsupported","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_CompactRejectsExplicitlyUnsupported\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactRejectsExplicitlyUnsupported","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_CompactRejectsExplicitlyUnsupported (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactRejectsExplicitlyUnsupported","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionIgnoresLegacyCompactProbe"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionIgnoresLegacyCompactProbe","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionIgnoresLegacyCompactProbe\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionIgnoresLegacyCompactProbe/legacy_scheduler"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionIgnoresLegacyCompactProbe/legacy_scheduler","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionIgnoresLegacyCompactProbe/legacy_scheduler\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionIgnoresLegacyCompactProbe/legacy_scheduler","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionIgnoresLegacyCompactProbe/legacy_scheduler (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionIgnoresLegacyCompactProbe/legacy_scheduler","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionIgnoresLegacyCompactProbe/advanced_scheduler"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionIgnoresLegacyCompactProbe/advanced_scheduler","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionIgnoresLegacyCompactProbe/advanced_scheduler\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionIgnoresLegacyCompactProbe/advanced_scheduler","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionIgnoresLegacyCompactProbe/advanced_scheduler (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionIgnoresLegacyCompactProbe/advanced_scheduler","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionIgnoresLegacyCompactProbe","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionIgnoresLegacyCompactProbe (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionIgnoresLegacyCompactProbe","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionAllowsForceOff"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionAllowsForceOff","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionAllowsForceOff\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionAllowsForceOff/legacy_scheduler"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionAllowsForceOff/legacy_scheduler","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionAllowsForceOff/legacy_scheduler\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionAllowsForceOff/legacy_scheduler","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionAllowsForceOff/legacy_scheduler (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionAllowsForceOff/legacy_scheduler","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionAllowsForceOff/advanced_scheduler"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionAllowsForceOff/advanced_scheduler","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionAllowsForceOff/advanced_scheduler\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionAllowsForceOff/advanced_scheduler","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionAllowsForceOff/advanced_scheduler (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionAllowsForceOff/advanced_scheduler","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionAllowsForceOff","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionAllowsForceOff (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionAllowsForceOff","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionRequiresResponsesCapability"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionRequiresResponsesCapability","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionRequiresResponsesCapability\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionRequiresResponsesCapability/legacy_scheduler"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionRequiresResponsesCapability/legacy_scheduler","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionRequiresResponsesCapability/legacy_scheduler\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionRequiresResponsesCapability/legacy_scheduler","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionRequiresResponsesCapability/legacy_scheduler (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionRequiresResponsesCapability/legacy_scheduler","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionRequiresResponsesCapability/advanced_scheduler"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionRequiresResponsesCapability/advanced_scheduler","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionRequiresResponsesCapability/advanced_scheduler\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionRequiresResponsesCapability/advanced_scheduler","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionRequiresResponsesCapability/advanced_scheduler (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionRequiresResponsesCapability/advanced_scheduler","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionRequiresResponsesCapability","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionRequiresResponsesCapability (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionRequiresResponsesCapability","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LegacyCompactionKeepsCompactEligibility"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LegacyCompactionKeepsCompactEligibility","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_LegacyCompactionKeepsCompactEligibility\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LegacyCompactionKeepsCompactEligibility/legacy_scheduler"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LegacyCompactionKeepsCompactEligibility/legacy_scheduler","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_LegacyCompactionKeepsCompactEligibility/legacy_scheduler\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LegacyCompactionKeepsCompactEligibility/legacy_scheduler","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_LegacyCompactionKeepsCompactEligibility/legacy_scheduler (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LegacyCompactionKeepsCompactEligibility/legacy_scheduler","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LegacyCompactionKeepsCompactEligibility/advanced_scheduler"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LegacyCompactionKeepsCompactEligibility/advanced_scheduler","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_LegacyCompactionKeepsCompactEligibility/advanced_scheduler\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LegacyCompactionKeepsCompactEligibility/advanced_scheduler","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_LegacyCompactionKeepsCompactEligibility/advanced_scheduler (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LegacyCompactionKeepsCompactEligibility/advanced_scheduler","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LegacyCompactionKeepsCompactEligibility","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_LegacyCompactionKeepsCompactEligibility (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LegacyCompactionKeepsCompactEligibility","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactRequiresResponsesCapability"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactRequiresResponsesCapability","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_CompactRequiresResponsesCapability\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactRequiresResponsesCapability","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_CompactRequiresResponsesCapability (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactRequiresResponsesCapability","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactSkipsChatOnlyAccount"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactSkipsChatOnlyAccount","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_CompactSkipsChatOnlyAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactSkipsChatOnlyAccount","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_CompactSkipsChatOnlyAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactSkipsChatOnlyAccount","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactFallsBackToUnknown"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactFallsBackToUnknown","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_CompactFallsBackToUnknown\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactFallsBackToUnknown","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_CompactFallsBackToUnknown (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactFallsBackToUnknown","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactAllowsGrok"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactAllowsGrok","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_CompactAllowsGrok\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactAllowsGrok","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_CompactAllowsGrok (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactAllowsGrok","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier","Output":"=== RUN TestOpenAICompactSupportTier\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/nil"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/nil","Output":"=== RUN TestOpenAICompactSupportTier/nil\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/nil","Output":"--- PASS: TestOpenAICompactSupportTier/nil (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/nil","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/non_openai"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/non_openai","Output":"=== RUN TestOpenAICompactSupportTier/non_openai\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/non_openai","Output":"--- PASS: TestOpenAICompactSupportTier/non_openai (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/non_openai","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/grok"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/grok","Output":"=== RUN TestOpenAICompactSupportTier/grok\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/grok","Output":"--- PASS: TestOpenAICompactSupportTier/grok (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/grok","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/openai_unknown"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/openai_unknown","Output":"=== RUN TestOpenAICompactSupportTier/openai_unknown\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/openai_unknown","Output":"--- PASS: TestOpenAICompactSupportTier/openai_unknown (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/openai_unknown","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/openai_supported"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/openai_supported","Output":"=== RUN TestOpenAICompactSupportTier/openai_supported\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/openai_supported","Output":"--- PASS: TestOpenAICompactSupportTier/openai_supported (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/openai_supported","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/openai_unsupported"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/openai_unsupported","Output":"=== RUN TestOpenAICompactSupportTier/openai_unsupported\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/openai_unsupported","Output":"--- PASS: TestOpenAICompactSupportTier/openai_unsupported (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/openai_unsupported","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/force_on"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/force_on","Output":"=== RUN TestOpenAICompactSupportTier/force_on\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/force_on","Output":"--- PASS: TestOpenAICompactSupportTier/force_on (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/force_on","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/force_off_overrides_probe_true"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/force_off_overrides_probe_true","Output":"=== RUN TestOpenAICompactSupportTier/force_off_overrides_probe_true\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/force_off_overrides_probe_true","Output":"--- PASS: TestOpenAICompactSupportTier/force_off_overrides_probe_true (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/force_off_overrides_probe_true","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier","Output":"--- PASS: TestOpenAICompactSupportTier (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_ResetWeightPrefersSoonestReset"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_ResetWeightPrefersSoonestReset","Output":"=== RUN TestBuildOpenAIAccountLoadPlan_ResetWeightPrefersSoonestReset\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_ResetWeightPrefersSoonestReset","Output":"--- PASS: TestBuildOpenAIAccountLoadPlan_ResetWeightPrefersSoonestReset (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_ResetWeightPrefersSoonestReset","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_ResetWeightZeroNoEffect"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_ResetWeightZeroNoEffect","Output":"=== RUN TestBuildOpenAIAccountLoadPlan_ResetWeightZeroNoEffect\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_ResetWeightZeroNoEffect","Output":"--- PASS: TestBuildOpenAIAccountLoadPlan_ResetWeightZeroNoEffect (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_ResetWeightZeroNoEffect","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_ResetWeightIgnoresNilWindow"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_ResetWeightIgnoresNilWindow","Output":"=== RUN TestBuildOpenAIAccountLoadPlan_ResetWeightIgnoresNilWindow\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_ResetWeightIgnoresNilWindow","Output":"--- PASS: TestBuildOpenAIAccountLoadPlan_ResetWeightIgnoresNilWindow (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_ResetWeightIgnoresNilWindow","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaHeadroomFactor_PrimaryUsedPercent"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaHeadroomFactor_PrimaryUsedPercent","Output":"=== RUN TestOpenAIQuotaHeadroomFactor_PrimaryUsedPercent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaHeadroomFactor_PrimaryUsedPercent","Output":"--- PASS: TestOpenAIQuotaHeadroomFactor_PrimaryUsedPercent (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaHeadroomFactor_PrimaryUsedPercent","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaHeadroomFactor_PrimaryMissingIsNeutral"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaHeadroomFactor_PrimaryMissingIsNeutral","Output":"=== RUN TestOpenAIQuotaHeadroomFactor_PrimaryMissingIsNeutral\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaHeadroomFactor_PrimaryMissingIsNeutral","Output":"--- PASS: TestOpenAIQuotaHeadroomFactor_PrimaryMissingIsNeutral (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaHeadroomFactor_PrimaryMissingIsNeutral","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaHeadroomFactor_PrimaryResetExpiredIsNeutral"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaHeadroomFactor_PrimaryResetExpiredIsNeutral","Output":"=== RUN TestOpenAIQuotaHeadroomFactor_PrimaryResetExpiredIsNeutral\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaHeadroomFactor_PrimaryResetExpiredIsNeutral","Output":"--- PASS: TestOpenAIQuotaHeadroomFactor_PrimaryResetExpiredIsNeutral (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaHeadroomFactor_PrimaryResetExpiredIsNeutral","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaHeadroomFactor_SecondaryLowHeadroomDiscountsPrimary"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaHeadroomFactor_SecondaryLowHeadroomDiscountsPrimary","Output":"=== RUN TestOpenAIQuotaHeadroomFactor_SecondaryLowHeadroomDiscountsPrimary\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaHeadroomFactor_SecondaryLowHeadroomDiscountsPrimary","Output":"--- PASS: TestOpenAIQuotaHeadroomFactor_SecondaryLowHeadroomDiscountsPrimary (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaHeadroomFactor_SecondaryLowHeadroomDiscountsPrimary","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_QuotaHeadroomPrefersHigher7dRemaining"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_QuotaHeadroomPrefersHigher7dRemaining","Output":"=== RUN TestBuildOpenAIAccountLoadPlan_QuotaHeadroomPrefersHigher7dRemaining\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_QuotaHeadroomPrefersHigher7dRemaining","Output":"--- PASS: TestBuildOpenAIAccountLoadPlan_QuotaHeadroomPrefersHigher7dRemaining (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_QuotaHeadroomPrefersHigher7dRemaining","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_QuotaHeadroomZeroNoEffect"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_QuotaHeadroomZeroNoEffect","Output":"=== RUN TestBuildOpenAIAccountLoadPlan_QuotaHeadroomZeroNoEffect\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_QuotaHeadroomZeroNoEffect","Output":"--- PASS: TestBuildOpenAIAccountLoadPlan_QuotaHeadroomZeroNoEffect (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_QuotaHeadroomZeroNoEffect","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_DBOverridesConfig"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_DBOverridesConfig","Output":"=== RUN TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_DBOverridesConfig\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_DBOverridesConfig","Output":"--- PASS: TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_DBOverridesConfig (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_DBOverridesConfig","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig","Output":"=== RUN TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig/invalid_single_value"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig/invalid_single_value","Output":"=== RUN TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig/invalid_single_value\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig/invalid_single_value","Output":"--- PASS: TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig/invalid_single_value (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig/invalid_single_value","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig/base_sum_overflow"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig/base_sum_overflow","Output":"=== RUN TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig/base_sum_overflow\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig/base_sum_overflow","Output":"--- PASS: TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig/base_sum_overflow (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig/base_sum_overflow","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig/sticky_total_sum_overflow"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig/sticky_total_sum_overflow","Output":"=== RUN TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig/sticky_total_sum_overflow\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig/sticky_total_sum_overflow","Output":"--- PASS: TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig/sticky_total_sum_overflow (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig/sticky_total_sum_overflow","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig","Output":"--- PASS: TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabledUsesLegacyLoadAwareness"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabledUsesLegacyLoadAwareness","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabledUsesLegacyLoadAwareness\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabledUsesLegacyLoadAwareness","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabledUsesLegacyLoadAwareness (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabledUsesLegacyLoadAwareness","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_LoadBatchReportsFilterReasons"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_LoadBatchReportsFilterReasons","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_LoadBatchReportsFilterReasons\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_LoadBatchReportsFilterReasons","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_LoadBatchReportsFilterReasons (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_LoadBatchReportsFilterReasons","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_RequiredWSV2_SkipsHTTPOnlyAccount"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_RequiredWSV2_SkipsHTTPOnlyAccount","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_RequiredWSV2_SkipsHTTPOnlyAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_RequiredWSV2_SkipsHTTPOnlyAccount","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_RequiredWSV2_SkipsHTTPOnlyAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_RequiredWSV2_SkipsHTTPOnlyAccount","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_RequiredWSV2_NoAvailableAccount"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_RequiredWSV2_NoAvailableAccount","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_RequiredWSV2_NoAvailableAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_RequiredWSV2_NoAvailableAccount","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_RequiredWSV2_NoAvailableAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_RequiredWSV2_NoAvailableAccount","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_EmbeddingsSkipsChatOnlyAccount"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_EmbeddingsSkipsChatOnlyAccount","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_EmbeddingsSkipsChatOnlyAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_EmbeddingsSkipsChatOnlyAccount","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_EmbeddingsSkipsChatOnlyAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_EmbeddingsSkipsChatOnlyAccount","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForTokenCount_DoesNotAcquireGenerationSlot"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForTokenCount_DoesNotAcquireGenerationSlot","Output":"=== RUN TestOpenAIGatewayService_SelectAccountForTokenCount_DoesNotAcquireGenerationSlot\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForTokenCount_DoesNotAcquireGenerationSlot","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountForTokenCount_DoesNotAcquireGenerationSlot (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForTokenCount_DoesNotAcquireGenerationSlot","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey/生图意图仅选中支持_responses_的账号"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey/生图意图仅选中支持_responses_的账号","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey/生图意图仅选中支持_responses_的账号\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey/生图意图仅选中支持_responses_的账号","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey/生图意图仅选中支持_responses_的账号 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey/生图意图仅选中支持_responses_的账号","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey/仅有不支持_responses_的账号时生图意图无可用账号"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey/仅有不支持_responses_的账号时生图意图无可用账号","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey/仅有不支持_responses_的账号时生图意图无可用账号\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey/仅有不支持_responses_的账号时生图意图无可用账号","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey/仅有不支持_responses_的账号时生图意图无可用账号 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey/仅有不支持_responses_的账号时生图意图无可用账号","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey/非生图路径仍可选中不支持_responses_的账号"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey/非生图路径仍可选中不支持_responses_的账号","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey/非生图路径仍可选中不支持_responses_的账号\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey/非生图路径仍可选中不支持_responses_的账号","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey/非生图路径仍可选中不支持_responses_的账号 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey/非生图路径仍可选中不支持_responses_的账号","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_AlphaSearchAllowsAPIKeyAccount"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_AlphaSearchAllowsAPIKeyAccount","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_AlphaSearchAllowsAPIKeyAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_AlphaSearchAllowsAPIKeyAccount","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_AlphaSearchAllowsAPIKeyAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_AlphaSearchAllowsAPIKeyAccount","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_AllowsGrokChatAccount"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_AllowsGrokChatAccount","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_AllowsGrokChatAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_AllowsGrokChatAccount","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_AllowsGrokChatAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_AllowsGrokChatAccount","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts/media_generation_skips_higher_priority_ineligible_account"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts/media_generation_skips_higher_priority_ineligible_account","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts/media_generation_skips_higher_priority_ineligible_account\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts/media_generation_skips_higher_priority_ineligible_account","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts/media_generation_skips_higher_priority_ineligible_account (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts/media_generation_skips_higher_priority_ineligible_account","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts/media_generation_fails_closed_when_all_accounts_are_ineligible"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts/media_generation_fails_closed_when_all_accounts_are_ineligible","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts/media_generation_fails_closed_when_all_accounts_are_ineligible\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts/media_generation_fails_closed_when_all_accounts_are_ineligible","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts/media_generation_fails_closed_when_all_accounts_are_ineligible (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts/media_generation_fails_closed_when_all_accounts_are_ineligible","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts/chat_remains_routable_on_media-ineligible_account"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts/chat_remains_routable_on_media-ineligible_account","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts/chat_remains_routable_on_media-ineligible_account\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts/chat_remains_routable_on_media-ineligible_account","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts/chat_remains_routable_on_media-ineligible_account (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts/chat_remains_routable_on_media-ineligible_account","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorReportsQuotaAutoPauseExclusion"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorReportsQuotaAutoPauseExclusion","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorReportsQuotaAutoPauseExclusion\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorReportsQuotaAutoPauseExclusion","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorReportsQuotaAutoPauseExclusion (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorReportsQuotaAutoPauseExclusion","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorReportsModelNotSupported"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorReportsModelNotSupported","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorReportsModelNotSupported\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorReportsModelNotSupported","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorReportsModelNotSupported (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorReportsModelNotSupported","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorAggregatesReasonsDeterministically"}
- {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorAggregatesReasonsDeterministically","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorAggregatesReasonsDeterministically\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorAggregatesReasonsDeterministically","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorAggregatesReasonsDeterministically (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorAggregatesReasonsDeterministically","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorReportsEmptyPool"}
- {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorReportsEmptyPool","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorReportsEmptyPool\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorReportsEmptyPool","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorReportsEmptyPool (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorReportsEmptyPool","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_EnabledUsesAdvancedPreviousResponseRouting"}
- {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_EnabledUsesAdvancedPreviousResponseRouting","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_EnabledUsesAdvancedPreviousResponseRouting\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_EnabledUsesAdvancedPreviousResponseRouting","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_EnabledUsesAdvancedPreviousResponseRouting (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_EnabledUsesAdvancedPreviousResponseRouting","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_StickyWeightedSessionInTopKUsesStickyFirst"}
- {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_StickyWeightedSessionInTopKUsesStickyFirst","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_StickyWeightedSessionInTopKUsesStickyFirst\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_StickyWeightedSessionInTopKUsesStickyFirst","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_StickyWeightedSessionInTopKUsesStickyFirst (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_StickyWeightedSessionInTopKUsesStickyFirst","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_StickyWeightedPreviousRequiresMovableContext"}
- {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_StickyWeightedPreviousRequiresMovableContext","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_StickyWeightedPreviousRequiresMovableContext\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_StickyWeightedPreviousRequiresMovableContext","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_StickyWeightedPreviousRequiresMovableContext (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9730709+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_StickyWeightedPreviousRequiresMovableContext","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9730709+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_PreviousResponseCompactUnsupportedDeletesBinding"}
- {"Time":"2026-09-12T11:38:28.9730709+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_PreviousResponseCompactUnsupportedDeletesBinding","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_PreviousResponseCompactUnsupportedDeletesBinding\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.973598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_PreviousResponseCompactUnsupportedDeletesBinding","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_PreviousResponseCompactUnsupportedDeletesBinding (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.973598+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_PreviousResponseCompactUnsupportedDeletesBinding","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.973598+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_Enabled_EmbeddingsSkipsChatOnlyAccount"}
- {"Time":"2026-09-12T11:38:28.973598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_Enabled_EmbeddingsSkipsChatOnlyAccount","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_Enabled_EmbeddingsSkipsChatOnlyAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.973598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_Enabled_EmbeddingsSkipsChatOnlyAccount","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_Enabled_EmbeddingsSkipsChatOnlyAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.973598+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_Enabled_EmbeddingsSkipsChatOnlyAccount","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.973598+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_Enabled_EmbeddingsSkipsChatOnlyStickyBindings"}
- {"Time":"2026-09-12T11:38:28.973598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_Enabled_EmbeddingsSkipsChatOnlyStickyBindings","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_Enabled_EmbeddingsSkipsChatOnlyStickyBindings\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.973598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_Enabled_EmbeddingsSkipsChatOnlyStickyBindings","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_Enabled_EmbeddingsSkipsChatOnlyStickyBindings (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.973598+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_Enabled_EmbeddingsSkipsChatOnlyStickyBindings","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.973598+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAccountSchedulerMetrics_DisabledNoOp"}
- {"Time":"2026-09-12T11:38:28.973598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAccountSchedulerMetrics_DisabledNoOp","Output":"=== RUN TestOpenAIGatewayService_OpenAIAccountSchedulerMetrics_DisabledNoOp\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9741222+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAccountSchedulerMetrics_DisabledNoOp","Output":"--- PASS: TestOpenAIGatewayService_OpenAIAccountSchedulerMetrics_DisabledNoOp (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9741222+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAccountSchedulerMetrics_DisabledNoOp","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9741222+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SkipsQuarantinedSharedProxy"}
- {"Time":"2026-09-12T11:38:28.9741222+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SkipsQuarantinedSharedProxy","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_SkipsQuarantinedSharedProxy\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9741222+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SkipsQuarantinedSharedProxy","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_SkipsQuarantinedSharedProxy (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9741222+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SkipsQuarantinedSharedProxy","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9741222+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_FailsOpenWhenAllProxiesQuarantined"}
- {"Time":"2026-09-12T11:38:28.9741222+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_FailsOpenWhenAllProxiesQuarantined","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_FailsOpenWhenAllProxiesQuarantined\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9741222+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_FailsOpenWhenAllProxiesQuarantined","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_FailsOpenWhenAllProxiesQuarantined (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9741222+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_FailsOpenWhenAllProxiesQuarantined","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9741222+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyRateLimitedAccountFallsBackToFreshCandidate"}
- {"Time":"2026-09-12T11:38:28.9741222+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyRateLimitedAccountFallsBackToFreshCandidate","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyRateLimitedAccountFallsBackToFreshCandidate\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9741222+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyRateLimitedAccountFallsBackToFreshCandidate","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyRateLimitedAccountFallsBackToFreshCandidate (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9741222+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyRateLimitedAccountFallsBackToFreshCandidate","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9741222+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_AutoPauseBy5hThreshold"}
- {"Time":"2026-09-12T11:38:28.9741222+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_AutoPauseBy5hThreshold","Output":"=== RUN TestOpenAIGatewayService_SelectAccountForModelWithExclusions_AutoPauseBy5hThreshold\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.97465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_AutoPauseBy5hThreshold","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountForModelWithExclusions_AutoPauseBy5hThreshold (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.97465+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_AutoPauseBy5hThreshold","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.97465+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_AllowsBelow5hThreshold"}
- {"Time":"2026-09-12T11:38:28.97465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_AllowsBelow5hThreshold","Output":"=== RUN TestOpenAIGatewayService_SelectAccountForModelWithExclusions_AllowsBelow5hThreshold\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.97465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_AllowsBelow5hThreshold","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountForModelWithExclusions_AllowsBelow5hThreshold (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.97465+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_AllowsBelow5hThreshold","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.97465+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_AutoPauseBy7dThreshold"}
- {"Time":"2026-09-12T11:38:28.97465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_AutoPauseBy7dThreshold","Output":"=== RUN TestOpenAIGatewayService_SelectAccountForModelWithExclusions_AutoPauseBy7dThreshold\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.97465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_AutoPauseBy7dThreshold","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountForModelWithExclusions_AutoPauseBy7dThreshold (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.97465+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_AutoPauseBy7dThreshold","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.97465+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_UnconfiguredThresholdKeepsLegacyBehavior"}
- {"Time":"2026-09-12T11:38:28.97465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_UnconfiguredThresholdKeepsLegacyBehavior","Output":"=== RUN TestOpenAIGatewayService_SelectAccountForModelWithExclusions_UnconfiguredThresholdKeepsLegacyBehavior\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.97465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_UnconfiguredThresholdKeepsLegacyBehavior","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountForModelWithExclusions_UnconfiguredThresholdKeepsLegacyBehavior (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.97465+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_UnconfiguredThresholdKeepsLegacyBehavior","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.97465+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_UsesGlobalDefaultThreshold"}
- {"Time":"2026-09-12T11:38:28.97465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_UsesGlobalDefaultThreshold","Output":"=== RUN TestOpenAIGatewayService_SelectAccountForModelWithExclusions_UsesGlobalDefaultThreshold\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.97465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_UsesGlobalDefaultThreshold","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountForModelWithExclusions_UsesGlobalDefaultThreshold (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.97465+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_UsesGlobalDefaultThreshold","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_PerAccountDisableOverridesGlobalDefault"}
- {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_PerAccountDisableOverridesGlobalDefault","Output":"=== RUN TestOpenAIGatewayService_SelectAccountForModelWithExclusions_PerAccountDisableOverridesGlobalDefault\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_PerAccountDisableOverridesGlobalDefault","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountForModelWithExclusions_PerAccountDisableOverridesGlobalDefault (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_PerAccountDisableOverridesGlobalDefault","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_PerWindowDisableScoped"}
- {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_PerWindowDisableScoped","Output":"=== RUN TestOpenAIGatewayService_SelectAccountForModelWithExclusions_PerWindowDisableScoped\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_PerWindowDisableScoped","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountForModelWithExclusions_PerWindowDisableScoped (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_PerWindowDisableScoped","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_StaleUsageWindowResetSkipsPause"}
- {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_StaleUsageWindowResetSkipsPause","Output":"=== RUN TestOpenAIGatewayService_SelectAccountForModelWithExclusions_StaleUsageWindowResetSkipsPause\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_StaleUsageWindowResetSkipsPause","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountForModelWithExclusions_StaleUsageWindowResetSkipsPause (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_StaleUsageWindowResetSkipsPause","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_FreshUsageWindowStillPauses"}
- {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_FreshUsageWindowStillPauses","Output":"=== RUN TestOpenAIGatewayService_SelectAccountForModelWithExclusions_FreshUsageWindowStillPauses\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_FreshUsageWindowStillPauses","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountForModelWithExclusions_FreshUsageWindowStillPauses (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_FreshUsageWindowStillPauses","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_StaleUsageSnapshotSkipsPause_Issue2994"}
- {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_StaleUsageSnapshotSkipsPause_Issue2994","Output":"=== RUN TestOpenAIGatewayService_SelectAccountForModelWithExclusions_StaleUsageSnapshotSkipsPause_Issue2994\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_StaleUsageSnapshotSkipsPause_Issue2994","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountForModelWithExclusions_StaleUsageSnapshotSkipsPause_Issue2994 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_StaleUsageSnapshotSkipsPause_Issue2994","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_FreshExhaustedSnapshotStillPauses_Issue2994"}
- {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_FreshExhaustedSnapshotStillPauses_Issue2994","Output":"=== RUN TestOpenAIGatewayService_SelectAccountForModelWithExclusions_FreshExhaustedSnapshotStillPauses_Issue2994\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_FreshExhaustedSnapshotStillPauses_Issue2994","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountForModelWithExclusions_FreshExhaustedSnapshotStillPauses_Issue2994 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_FreshExhaustedSnapshotStillPauses_Issue2994","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_SkipsFreshlyRateLimitedSnapshotCandidate"}
- {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_SkipsFreshlyRateLimitedSnapshotCandidate","Output":"=== RUN TestOpenAIGatewayService_SelectAccountForModelWithExclusions_SkipsFreshlyRateLimitedSnapshotCandidate\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_SkipsFreshlyRateLimitedSnapshotCandidate","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountForModelWithExclusions_SkipsFreshlyRateLimitedSnapshotCandidate (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_SkipsFreshlyRateLimitedSnapshotCandidate","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_ModelRateLimitOnlySkipsThatModel"}
- {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_ModelRateLimitOnlySkipsThatModel","Output":"=== RUN TestOpenAIGatewayService_SelectAccountForModelWithExclusions_ModelRateLimitOnlySkipsThatModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_ModelRateLimitOnlySkipsThatModel","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountForModelWithExclusions_ModelRateLimitOnlySkipsThatModel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_ModelRateLimitOnlySkipsThatModel","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyDBRuntimeRecheckSkipsStaleCachedAccount"}
- {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyDBRuntimeRecheckSkipsStaleCachedAccount","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyDBRuntimeRecheckSkipsStaleCachedAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyDBRuntimeRecheckSkipsStaleCachedAccount","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyDBRuntimeRecheckSkipsStaleCachedAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyDBRuntimeRecheckSkipsStaleCachedAccount","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_DBRuntimeRecheckSkipsStaleCachedCandidate"}
- {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_DBRuntimeRecheckSkipsStaleCachedCandidate","Output":"=== RUN TestOpenAIGatewayService_SelectAccountForModelWithExclusions_DBRuntimeRecheckSkipsStaleCachedCandidate\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_DBRuntimeRecheckSkipsStaleCachedCandidate","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountForModelWithExclusions_DBRuntimeRecheckSkipsStaleCachedCandidate (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_DBRuntimeRecheckSkipsStaleCachedCandidate","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DBFreshGroupRecheckReleasesMovedAccount"}
- {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DBFreshGroupRecheckReleasesMovedAccount","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_DBFreshGroupRecheckReleasesMovedAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DBFreshGroupRecheckReleasesMovedAccount","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_DBFreshGroupRecheckReleasesMovedAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DBFreshGroupRecheckReleasesMovedAccount","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithLoadAwareness_DBFreshGroupRecheckWaitsOnValidAccount"}
- {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithLoadAwareness_DBFreshGroupRecheckWaitsOnValidAccount","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithLoadAwareness_DBFreshGroupRecheckWaitsOnValidAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithLoadAwareness_DBFreshGroupRecheckWaitsOnValidAccount","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithLoadAwareness_DBFreshGroupRecheckWaitsOnValidAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithLoadAwareness_DBFreshGroupRecheckWaitsOnValidAccount","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9762021+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_RecheckSelectedOpenAIAccountFromDB_SimpleModeUsesFullPool"}
- {"Time":"2026-09-12T11:38:28.9762021+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_RecheckSelectedOpenAIAccountFromDB_SimpleModeUsesFullPool","Output":"=== RUN TestOpenAIGatewayService_RecheckSelectedOpenAIAccountFromDB_SimpleModeUsesFullPool\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9762021+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_RecheckSelectedOpenAIAccountFromDB_SimpleModeUsesFullPool","Output":"--- PASS: TestOpenAIGatewayService_RecheckSelectedOpenAIAccountFromDB_SimpleModeUsesFullPool (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9762021+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_RecheckSelectedOpenAIAccountFromDB_SimpleModeUsesFullPool","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9762021+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_PreviousResponseSticky"}
- {"Time":"2026-09-12T11:38:28.9762021+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_PreviousResponseSticky","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_PreviousResponseSticky\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9762021+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_PreviousResponseSticky","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_PreviousResponseSticky (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9762021+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_PreviousResponseSticky","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9762021+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionSticky"}
- {"Time":"2026-09-12T11:38:28.9762021+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionSticky","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_SessionSticky\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionSticky","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_SessionSticky (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionSticky","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyBusyKeepsSticky"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyBusyKeepsSticky","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyBusyKeepsSticky\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyBusyKeepsSticky","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyBusyKeepsSticky (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyBusyKeepsSticky","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeByTTFT"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeByTTFT","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeByTTFT\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeByTTFT","Output":"2026/09/12 03:38:28 INFO sticky_escape_triggered account_id=21101 reason=ttft error_rate=0 ttft=17439.488\n"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeByTTFT","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeByTTFT (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeByTTFT","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeByErrorRate"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeByErrorRate","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeByErrorRate\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeByErrorRate","Output":"2026/09/12 03:38:28 INFO sticky_escape_triggered account_id=21201 reason=error_rate error_rate=0.67232 ttft=0\n"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeByErrorRate","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeByErrorRate (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeByErrorRate","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyBusyEscapes"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyBusyEscapes","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyBusyEscapes\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyBusyEscapes","Output":"2026/09/12 03:38:28 INFO sticky_escape_triggered account_id=21301 reason=concurrency_full error_rate=0 ttft=0\n"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyBusyEscapes","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyBusyEscapes (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyBusyEscapes","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeDisabledKeepsLegacyBehavior"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeDisabledKeepsLegacyBehavior","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeDisabledKeepsLegacyBehavior\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeDisabledKeepsLegacyBehavior","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeDisabledKeepsLegacyBehavior (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeDisabledKeepsLegacyBehavior","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityChoosesSubscriptionPoolFirst"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityChoosesSubscriptionPoolFirst","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityChoosesSubscriptionPoolFirst\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityChoosesSubscriptionPoolFirst","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityChoosesSubscriptionPoolFirst (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityChoosesSubscriptionPoolFirst","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityFallsBackWhenSubscriptionFull"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityFallsBackWhenSubscriptionFull","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityFallsBackWhenSubscriptionFull\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityFallsBackWhenSubscriptionFull","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityFallsBackWhenSubscriptionFull (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityFallsBackWhenSubscriptionFull","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityDisabledUsesScore"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityDisabledUsesScore","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityDisabledUsesScore\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityDisabledUsesScore","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityDisabledUsesScore (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityDisabledUsesScore","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_UsesAccountPriorityWithinGroupPool"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_UsesAccountPriorityWithinGroupPool","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_UsesAccountPriorityWithinGroupPool\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_UsesAccountPriorityWithinGroupPool","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_UsesAccountPriorityWithinGroupPool (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_UsesAccountPriorityWithinGroupPool","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAccountScheduler_SkipsAccountBlockedForRequestedModel"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAccountScheduler_SkipsAccountBlockedForRequestedModel","Output":"=== RUN TestOpenAIAccountScheduler_SkipsAccountBlockedForRequestedModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAccountScheduler_SkipsAccountBlockedForRequestedModel","Output":"--- PASS: TestOpenAIAccountScheduler_SkipsAccountBlockedForRequestedModel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAccountScheduler_SkipsAccountBlockedForRequestedModel","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReportOpenAIAccountScheduleResult_SuccessClearsModelTransientState"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReportOpenAIAccountScheduleResult_SuccessClearsModelTransientState","Output":"=== RUN TestReportOpenAIAccountScheduleResult_SuccessClearsModelTransientState\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReportOpenAIAccountScheduleResult_SuccessClearsModelTransientState","Output":"--- PASS: TestReportOpenAIAccountScheduleResult_SuccessClearsModelTransientState (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReportOpenAIAccountScheduleResult_SuccessClearsModelTransientState","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultOpenAIAccountScheduler_ShouldEscapeStickyAccount_ThresholdBoundary"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultOpenAIAccountScheduler_ShouldEscapeStickyAccount_ThresholdBoundary","Output":"=== RUN TestDefaultOpenAIAccountScheduler_ShouldEscapeStickyAccount_ThresholdBoundary\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultOpenAIAccountScheduler_ShouldEscapeStickyAccount_ThresholdBoundary","Output":"--- PASS: TestDefaultOpenAIAccountScheduler_ShouldEscapeStickyAccount_ThresholdBoundary (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultOpenAIAccountScheduler_ShouldEscapeStickyAccount_ThresholdBoundary","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionSticky_ForceHTTP"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionSticky_ForceHTTP","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_SessionSticky_ForceHTTP\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionSticky_ForceHTTP","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_SessionSticky_ForceHTTP (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionSticky_ForceHTTP","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_RequiredWSV2_SkipsStickyHTTPAccount"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_RequiredWSV2_SkipsStickyHTTPAccount","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_RequiredWSV2_SkipsStickyHTTPAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_RequiredWSV2_SkipsStickyHTTPAccount","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_RequiredWSV2_SkipsStickyHTTPAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_RequiredWSV2_SkipsStickyHTTPAccount","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ClearsStickyAccountOutsideGroup"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ClearsStickyAccountOutsideGroup","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_ClearsStickyAccountOutsideGroup\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ClearsStickyAccountOutsideGroup","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_ClearsStickyAccountOutsideGroup (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ClearsStickyAccountOutsideGroup","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_RequiredWSV2_NoAvailableAccount"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_RequiredWSV2_NoAvailableAccount","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_RequiredWSV2_NoAvailableAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_RequiredWSV2_NoAvailableAccount","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_RequiredWSV2_NoAvailableAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_RequiredWSV2_NoAvailableAccount","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LoadBalanceTopKFallback"}
- {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LoadBalanceTopKFallback","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_LoadBalanceTopKFallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9772233+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LoadBalanceTopKFallback","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_LoadBalanceTopKFallback (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9772233+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LoadBalanceTopKFallback","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9772233+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LoadBalanceTopKExcludesQuotaPaused"}
- {"Time":"2026-09-12T11:38:28.9772233+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LoadBalanceTopKExcludesQuotaPaused","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_LoadBalanceTopKExcludesQuotaPaused\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9772233+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LoadBalanceTopKExcludesQuotaPaused","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_LoadBalanceTopKExcludesQuotaPaused (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9772233+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LoadBalanceTopKExcludesQuotaPaused","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9772233+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAccountSchedulerMetrics"}
- {"Time":"2026-09-12T11:38:28.9772233+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAccountSchedulerMetrics","Output":"=== RUN TestOpenAIGatewayService_OpenAIAccountSchedulerMetrics\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9772233+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAccountSchedulerMetrics","Output":"--- PASS: TestOpenAIGatewayService_OpenAIAccountSchedulerMetrics (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9772233+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAccountSchedulerMetrics","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9772233+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAccountRuntimeStats_ReportAndSnapshot"}
- {"Time":"2026-09-12T11:38:28.9772233+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAccountRuntimeStats_ReportAndSnapshot","Output":"=== RUN TestOpenAIAccountRuntimeStats_ReportAndSnapshot\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9772233+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAccountRuntimeStats_ReportAndSnapshot","Output":"--- PASS: TestOpenAIAccountRuntimeStats_ReportAndSnapshot (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9772233+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAccountRuntimeStats_ReportAndSnapshot","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9772233+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAccountRuntimeStats_ReportConcurrent"}
- {"Time":"2026-09-12T11:38:28.9772233+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAccountRuntimeStats_ReportConcurrent","Output":"=== RUN TestOpenAIAccountRuntimeStats_ReportConcurrent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9782603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAccountRuntimeStats_ReportConcurrent","Output":"--- PASS: TestOpenAIAccountRuntimeStats_ReportConcurrent (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9782603+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAccountRuntimeStats_ReportConcurrent","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9782603+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSelectTopKOpenAICandidates"}
- {"Time":"2026-09-12T11:38:28.9782603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSelectTopKOpenAICandidates","Output":"=== RUN TestSelectTopKOpenAICandidates\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9782603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSelectTopKOpenAICandidates","Output":"--- PASS: TestSelectTopKOpenAICandidates (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9782603+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSelectTopKOpenAICandidates","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9782603+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWeightedSelectionOrder_DeterministicBySessionSeed"}
- {"Time":"2026-09-12T11:38:28.9782603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWeightedSelectionOrder_DeterministicBySessionSeed","Output":"=== RUN TestBuildOpenAIWeightedSelectionOrder_DeterministicBySessionSeed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9782603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWeightedSelectionOrder_DeterministicBySessionSeed","Output":"--- PASS: TestBuildOpenAIWeightedSelectionOrder_DeterministicBySessionSeed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9782603+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWeightedSelectionOrder_DeterministicBySessionSeed","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9782603+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LoadBalanceDistributesAcrossSessions"}
- {"Time":"2026-09-12T11:38:28.9782603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LoadBalanceDistributesAcrossSessions","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_LoadBalanceDistributesAcrossSessions\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9787734+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LoadBalanceDistributesAcrossSessions","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_LoadBalanceDistributesAcrossSessions (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9787734+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LoadBalanceDistributesAcrossSessions","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9787734+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAISelectionSeed_NoAffinityAddsEntropy"}
- {"Time":"2026-09-12T11:38:28.9787734+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAISelectionSeed_NoAffinityAddsEntropy","Output":"=== RUN TestDeriveOpenAISelectionSeed_NoAffinityAddsEntropy\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAISelectionSeed_NoAffinityAddsEntropy","Output":"--- PASS: TestDeriveOpenAISelectionSeed_NoAffinityAddsEntropy (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAISelectionSeed_NoAffinityAddsEntropy","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWeightedSelectionOrder_HandlesInvalidScores"}
- {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWeightedSelectionOrder_HandlesInvalidScores","Output":"=== RUN TestBuildOpenAIWeightedSelectionOrder_HandlesInvalidScores\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWeightedSelectionOrder_HandlesInvalidScores","Output":"--- PASS: TestBuildOpenAIWeightedSelectionOrder_HandlesInvalidScores (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWeightedSelectionOrder_HandlesInvalidScores","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectionRNG_SeedZeroStillWorks"}
- {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectionRNG_SeedZeroStillWorks","Output":"=== RUN TestOpenAISelectionRNG_SeedZeroStillWorks\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectionRNG_SeedZeroStillWorks","Output":"--- PASS: TestOpenAISelectionRNG_SeedZeroStillWorks (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectionRNG_SeedZeroStillWorks","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAccountCandidateHeap_PushPopAndInvalidType"}
- {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAccountCandidateHeap_PushPopAndInvalidType","Output":"=== RUN TestOpenAIAccountCandidateHeap_PushPopAndInvalidType\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAccountCandidateHeap_PushPopAndInvalidType","Output":"--- PASS: TestOpenAIAccountCandidateHeap_PushPopAndInvalidType (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAccountCandidateHeap_PushPopAndInvalidType","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultOpenAIAccountScheduler_ReportSwitchAndSnapshot"}
- {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultOpenAIAccountScheduler_ReportSwitchAndSnapshot","Output":"=== RUN TestDefaultOpenAIAccountScheduler_ReportSwitchAndSnapshot\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultOpenAIAccountScheduler_ReportSwitchAndSnapshot","Output":"--- PASS: TestDefaultOpenAIAccountScheduler_ReportSwitchAndSnapshot (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultOpenAIAccountScheduler_ReportSwitchAndSnapshot","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SchedulerWrappersAndDefaults"}
- {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SchedulerWrappersAndDefaults","Output":"=== RUN TestOpenAIGatewayService_SchedulerWrappersAndDefaults\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SchedulerWrappersAndDefaults","Output":"--- PASS: TestOpenAIGatewayService_SchedulerWrappersAndDefaults (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SchedulerWrappersAndDefaults","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultOpenAIAccountScheduler_IsAccountTransportCompatible_Branches"}
- {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultOpenAIAccountScheduler_IsAccountTransportCompatible_Branches","Output":"=== RUN TestDefaultOpenAIAccountScheduler_IsAccountTransportCompatible_Branches\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultOpenAIAccountScheduler_IsAccountTransportCompatible_Branches","Output":"--- PASS: TestDefaultOpenAIAccountScheduler_IsAccountTransportCompatible_Branches (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultOpenAIAccountScheduler_IsAccountTransportCompatible_Branches","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_StickyWeightedFallbackSkipsOutOfGroupStickyAccount"}
- {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_StickyWeightedFallbackSkipsOutOfGroupStickyAccount","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_StickyWeightedFallbackSkipsOutOfGroupStickyAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_StickyWeightedFallbackSkipsOutOfGroupStickyAccount","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_StickyWeightedFallbackSkipsOutOfGroupStickyAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_StickyWeightedFallbackSkipsOutOfGroupStickyAccount","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityWaitsOnBusySubscriptionWhenRegularUnusable"}
- {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityWaitsOnBusySubscriptionWhenRegularUnusable","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityWaitsOnBusySubscriptionWhenRegularUnusable\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityWaitsOnBusySubscriptionWhenRegularUnusable","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityWaitsOnBusySubscriptionWhenRegularUnusable (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityWaitsOnBusySubscriptionWhenRegularUnusable","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICostOverflowExpandedOnlyWhenCostAddsCandidates"}
- {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICostOverflowExpandedOnlyWhenCostAddsCandidates","Output":"=== RUN TestOpenAICostOverflowExpandedOnlyWhenCostAddsCandidates\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICostOverflowExpandedOnlyWhenCostAddsCandidates","Output":"--- PASS: TestOpenAICostOverflowExpandedOnlyWhenCostAddsCandidates (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICostOverflowExpandedOnlyWhenCostAddsCandidates","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateRecomputesPeakAtSelectionTime"}
- {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateRecomputesPeakAtSelectionTime","Output":"=== RUN TestOpenAIFreshUpstreamBillingRateRecomputesPeakAtSelectionTime\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateRecomputesPeakAtSelectionTime","Output":"--- PASS: TestOpenAIFreshUpstreamBillingRateRecomputesPeakAtSelectionTime (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateRecomputesPeakAtSelectionTime","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamCostFactorsSparseProbeIsNeutral"}
- {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamCostFactorsSparseProbeIsNeutral","Output":"=== RUN TestOpenAIUpstreamCostFactorsSparseProbeIsNeutral\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamCostFactorsSparseProbeIsNeutral","Output":"--- PASS: TestOpenAIUpstreamCostFactorsSparseProbeIsNeutral (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamCostFactorsSparseProbeIsNeutral","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamCostFactorsCoverageShrinksSparseSignal"}
- {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamCostFactorsCoverageShrinksSparseSignal","Output":"=== RUN TestOpenAIUpstreamCostFactorsCoverageShrinksSparseSignal\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamCostFactorsCoverageShrinksSparseSignal","Output":"--- PASS: TestOpenAIUpstreamCostFactorsCoverageShrinksSparseSignal (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamCostFactorsCoverageShrinksSparseSignal","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamCostFactorsUseMedianAgainstOutlier"}
- {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamCostFactorsUseMedianAgainstOutlier","Output":"=== RUN TestOpenAIUpstreamCostFactorsUseMedianAgainstOutlier\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamCostFactorsUseMedianAgainstOutlier","Output":"--- PASS: TestOpenAIUpstreamCostFactorsUseMedianAgainstOutlier (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamCostFactorsUseMedianAgainstOutlier","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAILegacyUpstreamRateOrderRequiresComparableRates"}
- {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAILegacyUpstreamRateOrderRequiresComparableRates","Output":"=== RUN TestOpenAILegacyUpstreamRateOrderRequiresComparableRates\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAILegacyUpstreamRateOrderRequiresComparableRates","Output":"--- PASS: TestOpenAILegacyUpstreamRateOrderRequiresComparableRates (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAILegacyUpstreamRateOrderRequiresComparableRates","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAILegacyUpstreamRateOrderIgnoresNonOpenAIPlatforms"}
- {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAILegacyUpstreamRateOrderIgnoresNonOpenAIPlatforms","Output":"=== RUN TestOpenAILegacyUpstreamRateOrderIgnoresNonOpenAIPlatforms\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAILegacyUpstreamRateOrderIgnoresNonOpenAIPlatforms","Output":"--- PASS: TestOpenAILegacyUpstreamRateOrderIgnoresNonOpenAIPlatforms (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAILegacyUpstreamRateOrderIgnoresNonOpenAIPlatforms","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISchedulingRatePlacesOAuthAtConfiguredReference"}
- {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISchedulingRatePlacesOAuthAtConfiguredReference","Output":"=== RUN TestOpenAISchedulingRatePlacesOAuthAtConfiguredReference\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISchedulingRatePlacesOAuthAtConfiguredReference","Output":"--- PASS: TestOpenAISchedulingRatePlacesOAuthAtConfiguredReference (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISchedulingRatePlacesOAuthAtConfiguredReference","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityUsesConfiguredOAuthReference"}
- {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityUsesConfiguredOAuthReference","Output":"=== RUN TestOpenAIGatewayServiceLegacyLowRatePriorityUsesConfiguredOAuthReference\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityUsesConfiguredOAuthReference","Output":"--- PASS: TestOpenAIGatewayServiceLegacyLowRatePriorityUsesConfiguredOAuthReference (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityUsesConfiguredOAuthReference","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelsSelectionIgnoresTokenCostSignal"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelsSelectionIgnoresTokenCostSignal","Output":"=== RUN TestOpenAIModelsSelectionIgnoresTokenCostSignal\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelsSelectionIgnoresTokenCostSignal","Output":"--- PASS: TestOpenAIModelsSelectionIgnoresTokenCostSignal (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelsSelectionIgnoresTokenCostSignal","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler","Output":"=== RUN TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/switch_off_keeps_priority_first"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/switch_off_keeps_priority_first","Output":"=== RUN TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/switch_off_keeps_priority_first\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/switch_off_keeps_priority_first","Output":"--- PASS: TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/switch_off_keeps_priority_first (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/switch_off_keeps_priority_first","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/load_batch"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/load_batch","Output":"=== RUN TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/load_batch\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/load_batch","Output":"--- PASS: TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/load_batch (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/load_batch","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/load_batch_disabled"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/load_batch_disabled","Output":"=== RUN TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/load_batch_disabled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/load_batch_disabled","Output":"--- PASS: TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/load_batch_disabled (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/load_batch_disabled","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/load_lookup_failure"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/load_lookup_failure","Output":"=== RUN TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/load_lookup_failure\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/load_lookup_failure","Output":"--- PASS: TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/load_lookup_failure (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/load_lookup_failure","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler","Output":"--- PASS: TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceAdvancedSchedulerIgnoresLegacyLowRateSwitch"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceAdvancedSchedulerIgnoresLegacyLowRateSwitch","Output":"=== RUN TestOpenAIGatewayServiceAdvancedSchedulerIgnoresLegacyLowRateSwitch\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceAdvancedSchedulerIgnoresLegacyLowRateSwitch","Output":"--- PASS: TestOpenAIGatewayServiceAdvancedSchedulerIgnoresLegacyLowRateSwitch (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceAdvancedSchedulerIgnoresLegacyLowRateSwitch","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePrioritySkipsCooledDownAccount"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePrioritySkipsCooledDownAccount","Output":"=== RUN TestOpenAIGatewayServiceLegacyLowRatePrioritySkipsCooledDownAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePrioritySkipsCooledDownAccount","Output":"--- PASS: TestOpenAIGatewayServiceLegacyLowRatePrioritySkipsCooledDownAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePrioritySkipsCooledDownAccount","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly","Output":"=== RUN TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/fresh"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/fresh","Output":"=== RUN TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/fresh\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/fresh","Output":"--- PASS: TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/fresh (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/fresh","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/zero_rate"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/zero_rate","Output":"=== RUN TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/zero_rate\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/zero_rate","Output":"--- PASS: TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/zero_rate (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/zero_rate","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/transient_failure_with_fresh_cache"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/transient_failure_with_fresh_cache","Output":"=== RUN TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/transient_failure_with_fresh_cache\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/transient_failure_with_fresh_cache","Output":"--- PASS: TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/transient_failure_with_fresh_cache (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/transient_failure_with_fresh_cache","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/stale"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/stale","Output":"=== RUN TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/stale\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/stale","Output":"--- PASS: TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/stale (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/stale","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/future"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/future","Output":"=== RUN TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/future\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/future","Output":"--- PASS: TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/future (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/future","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/unsupported"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/unsupported","Output":"=== RUN TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/unsupported\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/unsupported","Output":"--- PASS: TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/unsupported (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/unsupported","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly","Output":"--- PASS: TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAISelectionOrderIncludesOverflowOnlyForCostScheduling"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAISelectionOrderIncludesOverflowOnlyForCostScheduling","Output":"=== RUN TestBuildOpenAISelectionOrderIncludesOverflowOnlyForCostScheduling\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAISelectionOrderIncludesOverflowOnlyForCostScheduling","Output":"--- PASS: TestBuildOpenAISelectionOrderIncludesOverflowOnlyForCostScheduling (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAISelectionOrderIncludesOverflowOnlyForCostScheduling","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlanUsesCostOnlyForTokenScope"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlanUsesCostOnlyForTokenScope","Output":"=== RUN TestBuildOpenAIAccountLoadPlanUsesCostOnlyForTokenScope\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlanUsesCostOnlyForTokenScope","Output":"--- PASS: TestBuildOpenAIAccountLoadPlanUsesCostOnlyForTokenScope (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlanUsesCostOnlyForTokenScope","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountSchedulerScoreSnapshotUpstreamCostIsExactNoOpWithoutSignal"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountSchedulerScoreSnapshotUpstreamCostIsExactNoOpWithoutSignal","Output":"=== RUN TestBuildOpenAIAccountSchedulerScoreSnapshotUpstreamCostIsExactNoOpWithoutSignal\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountSchedulerScoreSnapshotUpstreamCostIsExactNoOpWithoutSignal","Output":"--- PASS: TestBuildOpenAIAccountSchedulerScoreSnapshotUpstreamCostIsExactNoOpWithoutSignal (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountSchedulerScoreSnapshotUpstreamCostIsExactNoOpWithoutSignal","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountSchedulerScoreSnapshotUsesUpstreamCostSignal"}
- {"Time":"2026-09-12T11:38:28.9819251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountSchedulerScoreSnapshotUsesUpstreamCostSignal","Output":"=== RUN TestBuildOpenAIAccountSchedulerScoreSnapshotUsesUpstreamCostSignal\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9819251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountSchedulerScoreSnapshotUsesUpstreamCostSignal","Output":"--- PASS: TestBuildOpenAIAccountSchedulerScoreSnapshotUsesUpstreamCostSignal (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9819251+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountSchedulerScoreSnapshotUsesUpstreamCostSignal","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9819251+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestServiceOpenAICompactAgentIdentityUsesFreshAssertion"}
- {"Time":"2026-09-12T11:38:28.9819251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestServiceOpenAICompactAgentIdentityUsesFreshAssertion","Output":"=== RUN TestAccountTestServiceOpenAICompactAgentIdentityUsesFreshAssertion\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.982436+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestServiceOpenAICompactAgentIdentityUsesFreshAssertion","Output":"--- PASS: TestAccountTestServiceOpenAICompactAgentIdentityUsesFreshAssertion (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.982436+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestServiceOpenAICompactAgentIdentityUsesFreshAssertion","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.982436+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestServiceOpenAICompactAgentIdentityRecoversInvalidTaskOnce"}
- {"Time":"2026-09-12T11:38:28.982436+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestServiceOpenAICompactAgentIdentityRecoversInvalidTaskOnce","Output":"=== RUN TestAccountTestServiceOpenAICompactAgentIdentityRecoversInvalidTaskOnce\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestServiceOpenAICompactAgentIdentityRecoversInvalidTaskOnce","Output":"--- PASS: TestAccountTestServiceOpenAICompactAgentIdentityRecoversInvalidTaskOnce (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestServiceOpenAICompactAgentIdentityRecoversInvalidTaskOnce","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityPassthroughKeepsSessionAndPromptCacheHeaders"}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityPassthroughKeepsSessionAndPromptCacheHeaders","Output":"=== RUN TestOpenAIAgentIdentityPassthroughKeepsSessionAndPromptCacheHeaders\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityPassthroughKeepsSessionAndPromptCacheHeaders","Output":"--- PASS: TestOpenAIAgentIdentityPassthroughKeepsSessionAndPromptCacheHeaders (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityPassthroughKeepsSessionAndPromptCacheHeaders","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityErrorRedactionDoesNotLeakCredentialValues"}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityErrorRedactionDoesNotLeakCredentialValues","Output":"=== RUN TestOpenAIAgentIdentityErrorRedactionDoesNotLeakCredentialValues\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityErrorRedactionDoesNotLeakCredentialValues","Output":"--- PASS: TestOpenAIAgentIdentityErrorRedactionDoesNotLeakCredentialValues (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityErrorRedactionDoesNotLeakCredentialValues","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes"}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes","Output":"=== RUN TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes/oauth"}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes/oauth","Output":"=== RUN TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes/oauth\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes/oauth","Output":"--- PASS: TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes/oauth (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes/oauth","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes/personal_access_token"}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes/personal_access_token","Output":"=== RUN TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes/personal_access_token\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes/personal_access_token","Output":"--- PASS: TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes/personal_access_token (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes/personal_access_token","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes/api_key"}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes/api_key","Output":"=== RUN TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes/api_key\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes/api_key","Output":"--- PASS: TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes/api_key (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes/api_key","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes","Output":"--- PASS: TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSAgentIdentityRecoveryRequiresTaskInvalidBody"}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSAgentIdentityRecoveryRequiresTaskInvalidBody","Output":"=== RUN TestOpenAIWSAgentIdentityRecoveryRequiresTaskInvalidBody\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSAgentIdentityRecoveryRequiresTaskInvalidBody","Output":"--- PASS: TestOpenAIWSAgentIdentityRecoveryRequiresTaskInvalidBody (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSAgentIdentityRecoveryRequiresTaskInvalidBody","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIWSBearerTokenAllowsAgentIdentityWithoutStoredToken"}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIWSBearerTokenAllowsAgentIdentityWithoutStoredToken","Output":"=== RUN TestValidateOpenAIWSBearerTokenAllowsAgentIdentityWithoutStoredToken\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIWSBearerTokenAllowsAgentIdentityWithoutStoredToken/Given_Agent_Identity_When_a_WS_path_receives_no_bearer_token_Then_dial-time_assertion_auth_is_allowed"}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIWSBearerTokenAllowsAgentIdentityWithoutStoredToken/Given_Agent_Identity_When_a_WS_path_receives_no_bearer_token_Then_dial-time_assertion_auth_is_allowed","Output":"=== RUN TestValidateOpenAIWSBearerTokenAllowsAgentIdentityWithoutStoredToken/Given_Agent_Identity_When_a_WS_path_receives_no_bearer_token_Then_dial-time_assertion_auth_is_allowed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIWSBearerTokenAllowsAgentIdentityWithoutStoredToken/Given_Agent_Identity_When_a_WS_path_receives_no_bearer_token_Then_dial-time_assertion_auth_is_allowed","Output":"--- PASS: TestValidateOpenAIWSBearerTokenAllowsAgentIdentityWithoutStoredToken/Given_Agent_Identity_When_a_WS_path_receives_no_bearer_token_Then_dial-time_assertion_auth_is_allowed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIWSBearerTokenAllowsAgentIdentityWithoutStoredToken/Given_Agent_Identity_When_a_WS_path_receives_no_bearer_token_Then_dial-time_assertion_auth_is_allowed","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIWSBearerTokenAllowsAgentIdentityWithoutStoredToken/Given_bearer_credentials_When_a_WS_path_receives_no_token_Then_the_request_is_rejected"}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIWSBearerTokenAllowsAgentIdentityWithoutStoredToken/Given_bearer_credentials_When_a_WS_path_receives_no_token_Then_the_request_is_rejected","Output":"=== RUN TestValidateOpenAIWSBearerTokenAllowsAgentIdentityWithoutStoredToken/Given_bearer_credentials_When_a_WS_path_receives_no_token_Then_the_request_is_rejected\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIWSBearerTokenAllowsAgentIdentityWithoutStoredToken/Given_bearer_credentials_When_a_WS_path_receives_no_token_Then_the_request_is_rejected","Output":"--- PASS: TestValidateOpenAIWSBearerTokenAllowsAgentIdentityWithoutStoredToken/Given_bearer_credentials_When_a_WS_path_receives_no_token_Then_the_request_is_rejected (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIWSBearerTokenAllowsAgentIdentityWithoutStoredToken/Given_bearer_credentials_When_a_WS_path_receives_no_token_Then_the_request_is_rejected","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIWSBearerTokenAllowsAgentIdentityWithoutStoredToken","Output":"--- PASS: TestValidateOpenAIWSBearerTokenAllowsAgentIdentityWithoutStoredToken (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIWSBearerTokenAllowsAgentIdentityWithoutStoredToken","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPoolHeadersFactoryRunsAtDialAndStalePrewarmIsDiscarded"}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPoolHeadersFactoryRunsAtDialAndStalePrewarmIsDiscarded","Output":"=== RUN TestOpenAIWSConnPoolHeadersFactoryRunsAtDialAndStalePrewarmIsDiscarded\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPoolHeadersFactoryRunsAtDialAndStalePrewarmIsDiscarded","Output":"--- PASS: TestOpenAIWSConnPoolHeadersFactoryRunsAtDialAndStalePrewarmIsDiscarded (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPoolHeadersFactoryRunsAtDialAndStalePrewarmIsDiscarded","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityTaskInvalidRetriesExactlyOnce"}
- {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityTaskInvalidRetriesExactlyOnce","Output":"=== RUN TestOpenAIAgentIdentityTaskInvalidRetriesExactlyOnce\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9855947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityTaskInvalidRetriesExactlyOnce","Output":"2026/09/12 03:38:28 [OpenAI 自动透传] 命中自动透传分支: account=23 name=agent-identity type=oauth model=gpt-5.4 stream=true\n"}
- {"Time":"2026-09-12T11:38:28.9855947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityTaskInvalidRetriesExactlyOnce","Output":"--- PASS: TestOpenAIAgentIdentityTaskInvalidRetriesExactlyOnce (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9855947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityTaskInvalidRetriesExactlyOnce","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.986107+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityCompatRoutesRecoverInvalidTaskOnce"}
- {"Time":"2026-09-12T11:38:28.986107+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityCompatRoutesRecoverInvalidTaskOnce","Output":"=== RUN TestOpenAIAgentIdentityCompatRoutesRecoverInvalidTaskOnce\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.986107+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityCompatRoutesRecoverInvalidTaskOnce/chat_completions"}
- {"Time":"2026-09-12T11:38:28.986107+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityCompatRoutesRecoverInvalidTaskOnce/chat_completions","Output":"=== RUN TestOpenAIAgentIdentityCompatRoutesRecoverInvalidTaskOnce/chat_completions\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9866201+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityCompatRoutesRecoverInvalidTaskOnce/chat_completions","Output":"--- PASS: TestOpenAIAgentIdentityCompatRoutesRecoverInvalidTaskOnce/chat_completions (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9866201+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityCompatRoutesRecoverInvalidTaskOnce/chat_completions","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9866201+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityCompatRoutesRecoverInvalidTaskOnce/anthropic_messages"}
- {"Time":"2026-09-12T11:38:28.9866201+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityCompatRoutesRecoverInvalidTaskOnce/anthropic_messages","Output":"=== RUN TestOpenAIAgentIdentityCompatRoutesRecoverInvalidTaskOnce/anthropic_messages\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9876617+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityCompatRoutesRecoverInvalidTaskOnce/anthropic_messages","Output":"--- PASS: TestOpenAIAgentIdentityCompatRoutesRecoverInvalidTaskOnce/anthropic_messages (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9876617+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityCompatRoutesRecoverInvalidTaskOnce/anthropic_messages","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9876617+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityCompatRoutesRecoverInvalidTaskOnce","Output":"--- PASS: TestOpenAIAgentIdentityCompatRoutesRecoverInvalidTaskOnce (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9876617+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityCompatRoutesRecoverInvalidTaskOnce","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9876617+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityChatRecoveryKeepsAutoDerivedSessionIsolationStable"}
- {"Time":"2026-09-12T11:38:28.9876617+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityChatRecoveryKeepsAutoDerivedSessionIsolationStable","Output":"=== RUN TestOpenAIAgentIdentityChatRecoveryKeepsAutoDerivedSessionIsolationStable\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9881771+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityChatRecoveryKeepsAutoDerivedSessionIsolationStable","Output":"--- PASS: TestOpenAIAgentIdentityChatRecoveryKeepsAutoDerivedSessionIsolationStable (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9881771+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityChatRecoveryKeepsAutoDerivedSessionIsolationStable","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9881771+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildAgentAssertionMatchesCodexEnvelopeAndSignature"}
- {"Time":"2026-09-12T11:38:28.9881771+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildAgentAssertionMatchesCodexEnvelopeAndSignature","Output":"=== RUN TestBuildAgentAssertionMatchesCodexEnvelopeAndSignature\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildAgentAssertionMatchesCodexEnvelopeAndSignature","Output":"--- PASS: TestBuildAgentAssertionMatchesCodexEnvelopeAndSignature (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildAgentAssertionMatchesCodexEnvelopeAndSignature","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDecryptAgentTaskIDSupportsCodexSealedBoxResponse"}
- {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDecryptAgentTaskIDSupportsCodexSealedBoxResponse","Output":"=== RUN TestDecryptAgentTaskIDSupportsCodexSealedBoxResponse\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDecryptAgentTaskIDSupportsCodexSealedBoxResponse","Output":"--- PASS: TestDecryptAgentTaskIDSupportsCodexSealedBoxResponse (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDecryptAgentTaskIDSupportsCodexSealedBoxResponse","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldApplyOpenAIAlphaSearchAccountErrorSideEffects"}
- {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldApplyOpenAIAlphaSearchAccountErrorSideEffects","Output":"=== RUN TestShouldApplyOpenAIAlphaSearchAccountErrorSideEffects\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldApplyOpenAIAlphaSearchAccountErrorSideEffects","Output":"--- PASS: TestShouldApplyOpenAIAlphaSearchAccountErrorSideEffects (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldApplyOpenAIAlphaSearchAccountErrorSideEffects","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAlphaSearchSchedulingModelUsesCanonicalAccountMapping"}
- {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAlphaSearchSchedulingModelUsesCanonicalAccountMapping","Output":"=== RUN TestOpenAIAlphaSearchSchedulingModelUsesCanonicalAccountMapping\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAlphaSearchSchedulingModelUsesCanonicalAccountMapping","Output":"--- PASS: TestOpenAIAlphaSearchSchedulingModelUsesCanonicalAccountMapping (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAlphaSearchSchedulingModelUsesCanonicalAccountMapping","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIAlphaSearchBody_RemovesResponsesOnlyFields"}
- {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIAlphaSearchBody_RemovesResponsesOnlyFields","Output":"=== RUN TestSanitizeOpenAIAlphaSearchBody_RemovesResponsesOnlyFields\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIAlphaSearchBody_RemovesResponsesOnlyFields","Output":"--- PASS: TestSanitizeOpenAIAlphaSearchBody_RemovesResponsesOnlyFields (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIAlphaSearchBody_RemovesResponsesOnlyFields","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIAlphaSearchEndpointUnsupported"}
- {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIAlphaSearchEndpointUnsupported","Output":"=== RUN TestIsOpenAIAlphaSearchEndpointUnsupported\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIAlphaSearchEndpointUnsupported","Output":"--- PASS: TestIsOpenAIAlphaSearchEndpointUnsupported (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIAlphaSearchEndpointUnsupported","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions","Output":"=== RUN TestClassifyOpenAIAPIKeyHealthFailureExclusions\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/account_attributed_502"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/account_attributed_502","Output":"=== RUN TestClassifyOpenAIAPIKeyHealthFailureExclusions/account_attributed_502\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/account_attributed_502","Output":"--- PASS: TestClassifyOpenAIAPIKeyHealthFailureExclusions/account_attributed_502 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/account_attributed_502","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/request_scoped_capacity"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/request_scoped_capacity","Output":"=== RUN TestClassifyOpenAIAPIKeyHealthFailureExclusions/request_scoped_capacity\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/request_scoped_capacity","Output":"--- PASS: TestClassifyOpenAIAPIKeyHealthFailureExclusions/request_scoped_capacity (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/request_scoped_capacity","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/provider_scoped_overload"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/provider_scoped_overload","Output":"=== RUN TestClassifyOpenAIAPIKeyHealthFailureExclusions/provider_scoped_overload\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/provider_scoped_overload","Output":"--- PASS: TestClassifyOpenAIAPIKeyHealthFailureExclusions/provider_scoped_overload (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/provider_scoped_overload","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/dedicated_same_account_retry"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/dedicated_same_account_retry","Output":"=== RUN TestClassifyOpenAIAPIKeyHealthFailureExclusions/dedicated_same_account_retry\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/dedicated_same_account_retry","Output":"--- PASS: TestClassifyOpenAIAPIKeyHealthFailureExclusions/dedicated_same_account_retry (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/dedicated_same_account_retry","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/credential_disable_path"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/credential_disable_path","Output":"=== RUN TestClassifyOpenAIAPIKeyHealthFailureExclusions/credential_disable_path\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/credential_disable_path","Output":"--- PASS: TestClassifyOpenAIAPIKeyHealthFailureExclusions/credential_disable_path (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/credential_disable_path","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/client_request"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/client_request","Output":"=== RUN TestClassifyOpenAIAPIKeyHealthFailureExclusions/client_request\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/client_request","Output":"--- PASS: TestClassifyOpenAIAPIKeyHealthFailureExclusions/client_request (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/client_request","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions","Output":"--- PASS: TestClassifyOpenAIAPIKeyHealthFailureExclusions (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAPIKeyHealthBreakerDefaultDisabled"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAPIKeyHealthBreakerDefaultDisabled","Output":"=== RUN TestOpenAIAPIKeyHealthBreakerDefaultDisabled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAPIKeyHealthBreakerDefaultDisabled","Output":"--- PASS: TestOpenAIAPIKeyHealthBreakerDefaultDisabled (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAPIKeyHealthBreakerDefaultDisabled","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAPIKeyHealthBreakerTripsPersistedAndRuntimeState"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAPIKeyHealthBreakerTripsPersistedAndRuntimeState","Output":"=== RUN TestOpenAIAPIKeyHealthBreakerTripsPersistedAndRuntimeState\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAPIKeyHealthBreakerTripsPersistedAndRuntimeState","Output":"--- PASS: TestOpenAIAPIKeyHealthBreakerTripsPersistedAndRuntimeState (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAPIKeyHealthBreakerTripsPersistedAndRuntimeState","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAPIKeyHealthSuccessDoesNotTouchSettingsOrCache"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAPIKeyHealthSuccessDoesNotTouchSettingsOrCache","Output":"=== RUN TestOpenAIAPIKeyHealthSuccessDoesNotTouchSettingsOrCache\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAPIKeyHealthSuccessDoesNotTouchSettingsOrCache","Output":"--- PASS: TestOpenAIAPIKeyHealthSuccessDoesNotTouchSettingsOrCache (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAPIKeyHealthSuccessDoesNotTouchSettingsOrCache","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportUsesCodexProbeHeaders"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportUsesCodexProbeHeaders","Output":"=== RUN TestProbeOpenAIAPIKeyResponsesSupportUsesCodexProbeHeaders\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportUsesCodexProbeHeaders","Output":"2026/09/12 03:38:28 probe_done: account_id=96 base_url=https://compat-upstream.example/v1 probe_model=gpt-5.4 status=200 supported=true\n"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportUsesCodexProbeHeaders","Output":"--- PASS: TestProbeOpenAIAPIKeyResponsesSupportUsesCodexProbeHeaders (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportUsesCodexProbeHeaders","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders","Output":"=== RUN TestProbeOpenAIAPIKeyResponsesSupportCNProviders\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders/deepseek_adaptive_supports_responses"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders/deepseek_adaptive_supports_responses","Output":"=== RUN TestProbeOpenAIAPIKeyResponsesSupportCNProviders/deepseek_adaptive_supports_responses\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders/deepseek_adaptive_supports_responses","Output":"--- PASS: TestProbeOpenAIAPIKeyResponsesSupportCNProviders/deepseek_adaptive_supports_responses (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders/deepseek_adaptive_supports_responses","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders/deepseek_chat_clears_forced_responses"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders/deepseek_chat_clears_forced_responses","Output":"=== RUN TestProbeOpenAIAPIKeyResponsesSupportCNProviders/deepseek_chat_clears_forced_responses\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders/deepseek_chat_clears_forced_responses","Output":"--- PASS: TestProbeOpenAIAPIKeyResponsesSupportCNProviders/deepseek_chat_clears_forced_responses (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders/deepseek_chat_clears_forced_responses","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders/kimi_adaptive_supports_responses"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders/kimi_adaptive_supports_responses","Output":"=== RUN TestProbeOpenAIAPIKeyResponsesSupportCNProviders/kimi_adaptive_supports_responses\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders/kimi_adaptive_supports_responses","Output":"--- PASS: TestProbeOpenAIAPIKeyResponsesSupportCNProviders/kimi_adaptive_supports_responses (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders/kimi_adaptive_supports_responses","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders/kimi_responses_protocol_supports_responses"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders/kimi_responses_protocol_supports_responses","Output":"=== RUN TestProbeOpenAIAPIKeyResponsesSupportCNProviders/kimi_responses_protocol_supports_responses\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders/kimi_responses_protocol_supports_responses","Output":"--- PASS: TestProbeOpenAIAPIKeyResponsesSupportCNProviders/kimi_responses_protocol_supports_responses (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders/kimi_responses_protocol_supports_responses","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders/zhipu_adaptive_falls_back_to_chat"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders/zhipu_adaptive_falls_back_to_chat","Output":"=== RUN TestProbeOpenAIAPIKeyResponsesSupportCNProviders/zhipu_adaptive_falls_back_to_chat\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders/zhipu_adaptive_falls_back_to_chat","Output":"--- PASS: TestProbeOpenAIAPIKeyResponsesSupportCNProviders/zhipu_adaptive_falls_back_to_chat (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders/zhipu_adaptive_falls_back_to_chat","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders","Output":"--- PASS: TestProbeOpenAIAPIKeyResponsesSupportCNProviders (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown","Output":"=== RUN TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown/incomplete_max_output_tokens"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown/incomplete_max_output_tokens","Output":"=== RUN TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown/incomplete_max_output_tokens\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown/incomplete_max_output_tokens","Output":"2026/09/12 03:38:28 probe_inconclusive_keep_unknown: account_id=4200 base_url=https://compat-upstream.example/v1 probe_model=gpt-5.4 status=200 response_status=incomplete reason=max_output_tokens\n"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown/incomplete_max_output_tokens","Output":"--- PASS: TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown/incomplete_max_output_tokens (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown/incomplete_max_output_tokens","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown/failed_status_on_http_200"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown/failed_status_on_http_200","Output":"=== RUN TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown/failed_status_on_http_200\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown/failed_status_on_http_200","Output":"2026/09/12 03:38:28 probe_inconclusive_keep_unknown: account_id=4200 base_url=https://compat-upstream.example/v1 probe_model=gpt-5.4 status=200 response_status=failed reason=\n"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown/failed_status_on_http_200","Output":"--- PASS: TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown/failed_status_on_http_200 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown/failed_status_on_http_200","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown","Output":"--- PASS: TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist","Output":"=== RUN TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/completed_with_function_call"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/completed_with_function_call","Output":"=== RUN TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/completed_with_function_call\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/completed_with_function_call","Output":"2026/09/12 03:38:28 probe_done: account_id=4200 base_url=https://compat-upstream.example/v1 probe_model=gpt-5.4 status=200 supported=true\n"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/completed_with_function_call","Output":"--- PASS: TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/completed_with_function_call (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/completed_with_function_call","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/completed_reasoning_only"}
- {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/completed_reasoning_only","Output":"=== RUN TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/completed_reasoning_only\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/completed_reasoning_only","Output":"2026/09/12 03:38:28 WARN openai_responses_probe_marked_unsupported account_id=4200 account_name=compat-upstream base_url=https://compat-upstream.example/v1 probe_model=gpt-5.4 upstream_status=200\n"}
- {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/completed_reasoning_only","Output":"2026/09/12 03:38:28 probe_done: account_id=4200 base_url=https://compat-upstream.example/v1 probe_model=gpt-5.4 status=200 supported=false\n"}
- {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/completed_reasoning_only","Output":"--- PASS: TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/completed_reasoning_only (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/completed_reasoning_only","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/incomplete_other_reason"}
- {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/incomplete_other_reason","Output":"=== RUN TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/incomplete_other_reason\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/incomplete_other_reason","Output":"2026/09/12 03:38:28 WARN openai_responses_probe_marked_unsupported account_id=4200 account_name=compat-upstream base_url=https://compat-upstream.example/v1 probe_model=gpt-5.4 upstream_status=200\n"}
- {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/incomplete_other_reason","Output":"2026/09/12 03:38:28 probe_done: account_id=4200 base_url=https://compat-upstream.example/v1 probe_model=gpt-5.4 status=200 supported=false\n"}
- {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/incomplete_other_reason","Output":"--- PASS: TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/incomplete_other_reason (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/incomplete_other_reason","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/no_status_field"}
- {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/no_status_field","Output":"=== RUN TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/no_status_field\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/no_status_field","Output":"2026/09/12 03:38:28 probe_done: account_id=4200 base_url=https://compat-upstream.example/v1 probe_model=gpt-5.4 status=200 supported=true\n"}
- {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/no_status_field","Output":"--- PASS: TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/no_status_field (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/no_status_field","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/endpoint_absent_404"}
- {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/endpoint_absent_404","Output":"=== RUN TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/endpoint_absent_404\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/endpoint_absent_404","Output":"2026/09/12 03:38:28 WARN openai_responses_probe_marked_unsupported account_id=4200 account_name=compat-upstream base_url=https://compat-upstream.example/v1 probe_model=gpt-5.4 upstream_status=404\n"}
- {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/endpoint_absent_404","Output":"2026/09/12 03:38:28 probe_done: account_id=4200 base_url=https://compat-upstream.example/v1 probe_model=gpt-5.4 status=404 supported=false\n"}
- {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/endpoint_absent_404","Output":"--- PASS: TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/endpoint_absent_404 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/endpoint_absent_404","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/server_error_stays_conservative_true"}
- {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/server_error_stays_conservative_true","Output":"=== RUN TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/server_error_stays_conservative_true\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/server_error_stays_conservative_true","Output":"2026/09/12 03:38:28 probe_done: account_id=4200 base_url=https://compat-upstream.example/v1 probe_model=gpt-5.4 status=500 supported=true\n"}
- {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/server_error_stays_conservative_true","Output":"--- PASS: TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/server_error_stays_conservative_true (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/server_error_stays_conservative_true","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist","Output":"--- PASS: TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthAstraProModeRejectionPassesThrough"}
- {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthAstraProModeRejectionPassesThrough","Output":"=== RUN TestOpenAIGatewayService_OAuthAstraProModeRejectionPassesThrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9907509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthAstraProModeRejectionPassesThrough","Output":"--- PASS: TestOpenAIGatewayService_OAuthAstraProModeRejectionPassesThrough (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9907509+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthAstraProModeRejectionPassesThrough","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9907509+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthAstraProModeKeptAcrossRejectedFieldRetry"}
- {"Time":"2026-09-12T11:38:28.9907509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthAstraProModeKeptAcrossRejectedFieldRetry","Output":"=== RUN TestOpenAIGatewayService_OAuthAstraProModeKeptAcrossRejectedFieldRetry\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9907509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthAstraProModeKeptAcrossRejectedFieldRetry","Output":"2026/09/12 03:38:28 [OpenAI] Retrying non-WSv2 request after indexed status parameter rejection (account: openai-oauth-namespace)\n"}
- {"Time":"2026-09-12T11:38:28.9912621+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthAstraProModeKeptAcrossRejectedFieldRetry","Output":"--- PASS: TestOpenAIGatewayService_OAuthAstraProModeKeptAcrossRejectedFieldRetry (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9912621+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthAstraProModeKeptAcrossRejectedFieldRetry","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9912621+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPCapacityShedIsRequestScopedForOAuthAccounts"}
- {"Time":"2026-09-12T11:38:28.9912621+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPCapacityShedIsRequestScopedForOAuthAccounts","Output":"=== RUN TestOpenAIHTTPCapacityShedIsRequestScopedForOAuthAccounts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9912621+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPCapacityShedIsRequestScopedForOAuthAccounts","Output":"--- PASS: TestOpenAIHTTPCapacityShedIsRequestScopedForOAuthAccounts (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9912621+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPCapacityShedIsRequestScopedForOAuthAccounts","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9912621+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamErrorFrameDoesNotStartClientOutput"}
- {"Time":"2026-09-12T11:38:28.9912621+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamErrorFrameDoesNotStartClientOutput","Output":"=== RUN TestOpenAIStreamErrorFrameDoesNotStartClientOutput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9912621+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamErrorFrameDoesNotStartClientOutput","Output":"--- PASS: TestOpenAIStreamErrorFrameDoesNotStartClientOutput (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9912621+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamErrorFrameDoesNotStartClientOutput","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9912621+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver"}
- {"Time":"2026-09-12T11:38:28.9912621+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver","Output":"=== RUN TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9912621+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver/native"}
- {"Time":"2026-09-12T11:38:28.9912621+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver/native","Output":"=== RUN TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver/native\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9917767+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver/native","Output":"--- PASS: TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver/native (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9917767+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver/native","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9917767+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver/passthrough"}
- {"Time":"2026-09-12T11:38:28.9917767+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver/passthrough","Output":"=== RUN TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver/passthrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9917767+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver/passthrough","Output":"--- PASS: TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver/passthrough (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9917767+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver/passthrough","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9917767+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver","Output":"--- PASS: TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9917767+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9917767+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamCapacityShedErrorFramePrecedingFailedStillFailsOver"}
- {"Time":"2026-09-12T11:38:28.9917767+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamCapacityShedErrorFramePrecedingFailedStillFailsOver","Output":"=== RUN TestOpenAIStreamCapacityShedErrorFramePrecedingFailedStillFailsOver\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9917767+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamCapacityShedErrorFramePrecedingFailedStillFailsOver","Output":"--- PASS: TestOpenAIStreamCapacityShedErrorFramePrecedingFailedStillFailsOver (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9917767+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamCapacityShedErrorFramePrecedingFailedStillFailsOver","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9917767+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamCapacityShedAfterOutputRewritesCodeForClient"}
- {"Time":"2026-09-12T11:38:28.9917767+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamCapacityShedAfterOutputRewritesCodeForClient","Output":"=== RUN TestOpenAIStreamCapacityShedAfterOutputRewritesCodeForClient\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9917767+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamCapacityShedAfterOutputRewritesCodeForClient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:28.991Z\",\"msg\":\"gateway.failover_suppressed_after_semantic_output\",\"service\":\"sub2api\",\"env\":\"test\",\"path\":\"native_sse\",\"event_type\":\"error\",\"upstream_request_id\":\"rid-shed-after-output\",\"account_id\":1,\"platform\":\"openai\"}\n"}
- {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamCapacityShedAfterOutputRewritesCodeForClient","Output":"--- PASS: TestOpenAIStreamCapacityShedAfterOutputRewritesCodeForClient (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamCapacityShedAfterOutputRewritesCodeForClient","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamProcessingFailureAfterOutputIsRecorded"}
- {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamProcessingFailureAfterOutputIsRecorded","Output":"=== RUN TestOpenAIStreamProcessingFailureAfterOutputIsRecorded\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamProcessingFailureAfterOutputIsRecorded/native"}
- {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamProcessingFailureAfterOutputIsRecorded/native","Output":"=== RUN TestOpenAIStreamProcessingFailureAfterOutputIsRecorded/native\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamProcessingFailureAfterOutputIsRecorded/native","Output":"--- PASS: TestOpenAIStreamProcessingFailureAfterOutputIsRecorded/native (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamProcessingFailureAfterOutputIsRecorded/native","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamProcessingFailureAfterOutputIsRecorded/passthrough"}
- {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamProcessingFailureAfterOutputIsRecorded/passthrough","Output":"=== RUN TestOpenAIStreamProcessingFailureAfterOutputIsRecorded/passthrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamProcessingFailureAfterOutputIsRecorded/passthrough","Output":"--- PASS: TestOpenAIStreamProcessingFailureAfterOutputIsRecorded/passthrough (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamProcessingFailureAfterOutputIsRecorded/passthrough","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamProcessingFailureAfterOutputIsRecorded","Output":"--- PASS: TestOpenAIStreamProcessingFailureAfterOutputIsRecorded (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamProcessingFailureAfterOutputIsRecorded","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient"}
- {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient","Output":"=== RUN TestSanitizeOpenAICapacityShedErrorCodeForClient\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/failed事件嵌套code改写"}
- {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/failed事件嵌套code改写","Output":"=== RUN TestSanitizeOpenAICapacityShedErrorCodeForClient/failed事件嵌套code改写\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/failed事件嵌套code改写","Output":"--- PASS: TestSanitizeOpenAICapacityShedErrorCodeForClient/failed事件嵌套code改写 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/failed事件嵌套code改写","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/error帧裸code改写"}
- {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/error帧裸code改写","Output":"=== RUN TestSanitizeOpenAICapacityShedErrorCodeForClient/error帧裸code改写\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/error帧裸code改写","Output":"--- PASS: TestSanitizeOpenAICapacityShedErrorCodeForClient/error帧裸code改写 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/error帧裸code改写","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/failed事件只有过载文案时补充code"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/failed事件只有过载文案时补充code","Output":"=== RUN TestSanitizeOpenAICapacityShedErrorCodeForClient/failed事件只有过载文案时补充code\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/failed事件只有过载文案时补充code","Output":"--- PASS: TestSanitizeOpenAICapacityShedErrorCodeForClient/failed事件只有过载文案时补充code (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/failed事件只有过载文案时补充code","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/error帧只有过载文案时补充code"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/error帧只有过载文案时补充code","Output":"=== RUN TestSanitizeOpenAICapacityShedErrorCodeForClient/error帧只有过载文案时补充code\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/error帧只有过载文案时补充code","Output":"--- PASS: TestSanitizeOpenAICapacityShedErrorCodeForClient/error帧只有过载文案时补充code (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/error帧只有过载文案时补充code","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/rate_limit不改写"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/rate_limit不改写","Output":"=== RUN TestSanitizeOpenAICapacityShedErrorCodeForClient/rate_limit不改写\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/rate_limit不改写","Output":"--- PASS: TestSanitizeOpenAICapacityShedErrorCodeForClient/rate_limit不改写 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/rate_limit不改写","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/普通server_error不改写"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/普通server_error不改写","Output":"=== RUN TestSanitizeOpenAICapacityShedErrorCodeForClient/普通server_error不改写\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/普通server_error不改写","Output":"--- PASS: TestSanitizeOpenAICapacityShedErrorCodeForClient/普通server_error不改写 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/普通server_error不改写","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/非JSON不改写"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/非JSON不改写","Output":"=== RUN TestSanitizeOpenAICapacityShedErrorCodeForClient/非JSON不改写\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/非JSON不改写","Output":"--- PASS: TestSanitizeOpenAICapacityShedErrorCodeForClient/非JSON不改写 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/非JSON不改写","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient","Output":"--- PASS: TestSanitizeOpenAICapacityShedErrorCodeForClient (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexOutboundVersionHasSingleSource"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexOutboundVersionHasSingleSource","Output":"=== RUN TestCodexOutboundVersionHasSingleSource\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexOutboundVersionHasSingleSource","Output":"--- PASS: TestCodexOutboundVersionHasSingleSource (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexOutboundVersionHasSingleSource","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveAndSetOpenAIChatGPTAccountHeaders"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveAndSetOpenAIChatGPTAccountHeaders","Output":"=== RUN TestResolveAndSetOpenAIChatGPTAccountHeaders\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveAndSetOpenAIChatGPTAccountHeaders/shadow_resolves_to_parent_org"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveAndSetOpenAIChatGPTAccountHeaders/shadow_resolves_to_parent_org","Output":"=== RUN TestResolveAndSetOpenAIChatGPTAccountHeaders/shadow_resolves_to_parent_org\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveAndSetOpenAIChatGPTAccountHeaders/shadow_resolves_to_parent_org","Output":"--- PASS: TestResolveAndSetOpenAIChatGPTAccountHeaders/shadow_resolves_to_parent_org (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveAndSetOpenAIChatGPTAccountHeaders/shadow_resolves_to_parent_org","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveAndSetOpenAIChatGPTAccountHeaders/normal_account_passthrough"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveAndSetOpenAIChatGPTAccountHeaders/normal_account_passthrough","Output":"=== RUN TestResolveAndSetOpenAIChatGPTAccountHeaders/normal_account_passthrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveAndSetOpenAIChatGPTAccountHeaders/normal_account_passthrough","Output":"--- PASS: TestResolveAndSetOpenAIChatGPTAccountHeaders/normal_account_passthrough (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveAndSetOpenAIChatGPTAccountHeaders/normal_account_passthrough","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveAndSetOpenAIChatGPTAccountHeaders","Output":"--- PASS: TestResolveAndSetOpenAIChatGPTAccountHeaders (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveAndSetOpenAIChatGPTAccountHeaders","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectCodexClientRestriction_NilSettingServiceFailsClosed"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectCodexClientRestriction_NilSettingServiceFailsClosed","Output":"=== RUN TestDetectCodexClientRestriction_NilSettingServiceFailsClosed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectCodexClientRestriction_NilSettingServiceFailsClosed","Output":"--- PASS: TestDetectCodexClientRestriction_NilSettingServiceFailsClosed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectCodexClientRestriction_NilSettingServiceFailsClosed","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/未开启开关时绕过"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/未开启开关时绕过","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect/未开启开关时绕过\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/未开启开关时绕过","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect/未开启开关时绕过 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/未开启开关时绕过","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_cli_rs_命中"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_cli_rs_命中","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_cli_rs_命中\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_cli_rs_命中","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_cli_rs_命中 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_cli_rs_命中","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_vscode_命中"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_vscode_命中","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_vscode_命中\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_vscode_命中","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_vscode_命中 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_vscode_命中","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_app_命中"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_app_命中","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_app_命中\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_app_命中","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_app_命中 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_app_命中","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_originator_命中"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_originator_命中","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect/开启后_originator_命中\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_originator_命中","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect/开启后_originator_命中 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_originator_命中","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后非官方客户端拒绝"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后非官方客户端拒绝","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect/开启后非官方客户端拒绝\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后非官方客户端拒绝","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect/开启后非官方客户端拒绝 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后非官方客户端拒绝","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启_ForceCodexCLI_时允许通过"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启_ForceCodexCLI_时允许通过","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect/开启_ForceCodexCLI_时允许通过\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启_ForceCodexCLI_时允许通过","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect/开启_ForceCodexCLI_时允许通过 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启_ForceCodexCLI_时允许通过","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/未配置白名单时_Claude_Code_签名仍拒绝"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/未配置白名单时_Claude_Code_签名仍拒绝","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/未配置白名单时_Claude_Code_签名仍拒绝\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/未配置白名单时_Claude_Code_签名仍拒绝","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/未配置白名单时_Claude_Code_签名仍拒绝 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/未配置白名单时_Claude_Code_签名仍拒绝","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/未开启_codex_cli_only_时直接绕过"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/未开启_codex_cli_only_时直接绕过","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/未开启_codex_cli_only_时直接绕过\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/未开启_codex_cli_only_时直接绕过","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/未开启_codex_cli_only_时直接绕过 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/未开启_codex_cli_only_时直接绕过","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局白名单含_Claude_Code_签名_→_放行(whitelist)"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局白名单含_Claude_Code_签名_→_放行(whitelist)","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局白名单含_Claude_Code_签名_→_放行(whitelist)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局白名单含_Claude_Code_签名_→_放行(whitelist)","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局白名单含_Claude_Code_签名_→_放行(whitelist) (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局白名单含_Claude_Code_签名_→_放行(whitelist)","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局白名单含_Claude_Code_+_非签名_→_403"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局白名单含_Claude_Code_+_非签名_→_403","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局白名单含_Claude_Code_+_非签名_→_403\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局白名单含_Claude_Code_+_非签名_→_403","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局白名单含_Claude_Code_+_非签名_→_403 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局白名单含_Claude_Code_+_非签名_→_403","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局列表为空_+_账号未配_→_403"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局列表为空_+_账号未配_→_403","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局列表为空_+_账号未配_→_403\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局列表为空_+_账号未配_→_403","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局列表为空_+_账号未配_→_403 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局列表为空_+_账号未配_→_403","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage","Output":"=== RUN TestCodexClientRestrictionMessage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/版本太低:带实际版本与最低要求"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/版本太低:带实际版本与最低要求","Output":"=== RUN TestCodexClientRestrictionMessage/版本太低:带实际版本与最低要求\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/版本太低:带实际版本与最低要求","Output":"--- PASS: TestCodexClientRestrictionMessage/版本太低:带实际版本与最低要求 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/版本太低:带实际版本与最低要求","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/版本太高:带实际版本与最高允许"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/版本太高:带实际版本与最高允许","Output":"=== RUN TestCodexClientRestrictionMessage/版本太高:带实际版本与最高允许\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/版本太高:带实际版本与最高允许","Output":"--- PASS: TestCodexClientRestrictionMessage/版本太高:带实际版本与最高允许 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/版本太高:带实际版本与最高允许","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/无法识别版本:保持原通用句"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/无法识别版本:保持原通用句","Output":"=== RUN TestCodexClientRestrictionMessage/无法识别版本:保持原通用句\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/无法识别版本:保持原通用句","Output":"--- PASS: TestCodexClientRestrictionMessage/无法识别版本:保持原通用句 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/无法识别版本:保持原通用句","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/未命中官方:保持原通用句"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/未命中官方:保持原通用句","Output":"=== RUN TestCodexClientRestrictionMessage/未命中官方:保持原通用句\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/未命中官方:保持原通用句","Output":"--- PASS: TestCodexClientRestrictionMessage/未命中官方:保持原通用句 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/未命中官方:保持原通用句","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage","Output":"--- PASS: TestCodexClientRestrictionMessage (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_SetAndGet"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_SetAndGet","Output":"=== RUN TestOpenAIClientTransport_SetAndGet\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_SetAndGet","Output":"--- PASS: TestOpenAIClientTransport_SetAndGet (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_SetAndGet","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue","Output":"=== RUN TestOpenAIClientTransport_GetNormalizesRawContextValue\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/type_value_ws"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/type_value_ws","Output":"=== RUN TestOpenAIClientTransport_GetNormalizesRawContextValue/type_value_ws\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/type_value_ws","Output":"--- PASS: TestOpenAIClientTransport_GetNormalizesRawContextValue/type_value_ws (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/type_value_ws","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/http_sse_alias"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/http_sse_alias","Output":"=== RUN TestOpenAIClientTransport_GetNormalizesRawContextValue/http_sse_alias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/http_sse_alias","Output":"--- PASS: TestOpenAIClientTransport_GetNormalizesRawContextValue/http_sse_alias (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/http_sse_alias","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/sse_alias"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/sse_alias","Output":"=== RUN TestOpenAIClientTransport_GetNormalizesRawContextValue/sse_alias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/sse_alias","Output":"--- PASS: TestOpenAIClientTransport_GetNormalizesRawContextValue/sse_alias (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/sse_alias","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/websocket_alias"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/websocket_alias","Output":"=== RUN TestOpenAIClientTransport_GetNormalizesRawContextValue/websocket_alias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/websocket_alias","Output":"--- PASS: TestOpenAIClientTransport_GetNormalizesRawContextValue/websocket_alias (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/websocket_alias","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/invalid_string"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/invalid_string","Output":"=== RUN TestOpenAIClientTransport_GetNormalizesRawContextValue/invalid_string\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/invalid_string","Output":"--- PASS: TestOpenAIClientTransport_GetNormalizesRawContextValue/invalid_string (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/invalid_string","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/invalid_type"}
- {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/invalid_type","Output":"=== RUN TestOpenAIClientTransport_GetNormalizesRawContextValue/invalid_type\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/invalid_type","Output":"--- PASS: TestOpenAIClientTransport_GetNormalizesRawContextValue/invalid_type (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/invalid_type","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue","Output":"--- PASS: TestOpenAIClientTransport_GetNormalizesRawContextValue (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_NilAndUnknownInput"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_NilAndUnknownInput","Output":"=== RUN TestOpenAIClientTransport_NilAndUnknownInput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_NilAndUnknownInput","Output":"--- PASS: TestOpenAIClientTransport_NilAndUnknownInput (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_NilAndUnknownInput","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSDecisionByClientTransport"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSDecisionByClientTransport","Output":"=== RUN TestResolveOpenAIWSDecisionByClientTransport\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSDecisionByClientTransport","Output":"--- PASS: TestResolveOpenAIWSDecisionByClientTransport (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSDecisionByClientTransport","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexRequestBodyIdentityNamespaceIsStablePerOAuthAccount"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexRequestBodyIdentityNamespaceIsStablePerOAuthAccount","Output":"=== RUN TestCodexRequestBodyIdentityNamespaceIsStablePerOAuthAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexRequestBodyIdentityNamespaceIsStablePerOAuthAccount","Output":"--- PASS: TestCodexRequestBodyIdentityNamespaceIsStablePerOAuthAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexRequestBodyIdentityNamespaceIsStablePerOAuthAccount","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAccountIdentityNamespaceUsesStableCredentialSource"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAccountIdentityNamespaceUsesStableCredentialSource","Output":"=== RUN TestCodexAccountIdentityNamespaceUsesStableCredentialSource\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAccountIdentityNamespaceUsesStableCredentialSource","Output":"--- PASS: TestCodexAccountIdentityNamespaceUsesStableCredentialSource (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAccountIdentityNamespaceUsesStableCredentialSource","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAccountIdentitySourceResolvesShadowAndOverwritesFailoverContext"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAccountIdentitySourceResolvesShadowAndOverwritesFailoverContext","Output":"=== RUN TestCodexAccountIdentitySourceResolvesShadowAndOverwritesFailoverContext\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAccountIdentitySourceResolvesShadowAndOverwritesFailoverContext","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:28.993Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":111,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAccountIdentitySourceResolvesShadowAndOverwritesFailoverContext","Output":"--- PASS: TestCodexAccountIdentitySourceResolvesShadowAndOverwritesFailoverContext (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAccountIdentitySourceResolvesShadowAndOverwritesFailoverContext","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeadersNamespacesCodexIdentityByOAuthAccount"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeadersNamespacesCodexIdentityByOAuthAccount","Output":"=== RUN TestBuildOpenAIWSHeadersNamespacesCodexIdentityByOAuthAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeadersNamespacesCodexIdentityByOAuthAccount","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:28.993Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":11,\"final_model\":\"\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeadersNamespacesCodexIdentityByOAuthAccount","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:28.993Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":11,\"final_model\":\"\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeadersNamespacesCodexIdentityByOAuthAccount","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:28.993Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":19,\"final_model\":\"\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeadersNamespacesCodexIdentityByOAuthAccount","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:28.993Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":11,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeadersNamespacesCodexIdentityByOAuthAccount","Output":"--- PASS: TestBuildOpenAIWSHeadersNamespacesCodexIdentityByOAuthAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeadersNamespacesCodexIdentityByOAuthAccount","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestNamespacesCodexIdentityByOAuthAccount"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestNamespacesCodexIdentityByOAuthAccount","Output":"=== RUN TestBuildUpstreamRequestNamespacesCodexIdentityByOAuthAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestNamespacesCodexIdentityByOAuthAccount","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:28.993Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":11,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestNamespacesCodexIdentityByOAuthAccount","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:28.993Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":11,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestNamespacesCodexIdentityByOAuthAccount","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:28.993Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":19,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestNamespacesCodexIdentityByOAuthAccount","Output":"--- PASS: TestBuildUpstreamRequestNamespacesCodexIdentityByOAuthAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestNamespacesCodexIdentityByOAuthAccount","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupCorrectsOfficialAstraStaleModalities"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupCorrectsOfficialAstraStaleModalities","Output":"=== RUN TestBuildCodexModelsManifestForGroupCorrectsOfficialAstraStaleModalities\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupCorrectsOfficialAstraStaleModalities","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupCorrectsOfficialAstraStaleModalities\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupCorrectsOfficialAstraStaleModalities"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPreservesCompatibleAstraTextOnlyMetadata"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPreservesCompatibleAstraTextOnlyMetadata","Output":"=== RUN TestBuildCodexModelsManifestForGroupPreservesCompatibleAstraTextOnlyMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPreservesCompatibleAstraTextOnlyMetadata","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupPreservesCompatibleAstraTextOnlyMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPreservesCompatibleAstraTextOnlyMetadata"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode","Output":"=== RUN TestGetCodexFingerprintMode\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/nil_账号"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/nil_账号","Output":"=== RUN TestGetCodexFingerprintMode/nil_账号\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/nil_账号","Output":"--- PASS: TestGetCodexFingerprintMode/nil_账号 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/nil_账号","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/非_OAuth_账号"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/非_OAuth_账号","Output":"=== RUN TestGetCodexFingerprintMode/非_OAuth_账号\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/非_OAuth_账号","Output":"--- PASS: TestGetCodexFingerprintMode/非_OAuth_账号 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/非_OAuth_账号","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/OpenAI_setup_token"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/OpenAI_setup_token","Output":"=== RUN TestGetCodexFingerprintMode/OpenAI_setup_token\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/OpenAI_setup_token","Output":"--- PASS: TestGetCodexFingerprintMode/OpenAI_setup_token (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/OpenAI_setup_token","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/Anthropic_setup_token"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/Anthropic_setup_token","Output":"=== RUN TestGetCodexFingerprintMode/Anthropic_setup_token\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/Anthropic_setup_token","Output":"--- PASS: TestGetCodexFingerprintMode/Anthropic_setup_token (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/Anthropic_setup_token","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/无_extra_默认_off"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/无_extra_默认_off","Output":"=== RUN TestGetCodexFingerprintMode/无_extra_默认_off\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/无_extra_默认_off","Output":"--- PASS: TestGetCodexFingerprintMode/无_extra_默认_off (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/无_extra_默认_off","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/空值默认_off"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/空值默认_off","Output":"=== RUN TestGetCodexFingerprintMode/空值默认_off\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/空值默认_off","Output":"--- PASS: TestGetCodexFingerprintMode/空值默认_off (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/空值默认_off","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/非法值默认_off"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/非法值默认_off","Output":"=== RUN TestGetCodexFingerprintMode/非法值默认_off\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/非法值默认_off","Output":"--- PASS: TestGetCodexFingerprintMode/非法值默认_off (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/非法值默认_off","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/显式_off"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/显式_off","Output":"=== RUN TestGetCodexFingerprintMode/显式_off\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/显式_off","Output":"--- PASS: TestGetCodexFingerprintMode/显式_off (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/显式_off","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/device"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/device","Output":"=== RUN TestGetCodexFingerprintMode/device\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/device","Output":"--- PASS: TestGetCodexFingerprintMode/device (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/device","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/session"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/session","Output":"=== RUN TestGetCodexFingerprintMode/session\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/session","Output":"--- PASS: TestGetCodexFingerprintMode/session (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/session","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/full"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/full","Output":"=== RUN TestGetCodexFingerprintMode/full\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/full","Output":"--- PASS: TestGetCodexFingerprintMode/full (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/full","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode","Output":"--- PASS: TestGetCodexFingerprintMode (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOff"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOff","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_ExplicitOff\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOff","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_ExplicitOff (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOff","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_DefaultIsOff"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_DefaultIsOff","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_DefaultIsOff\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_DefaultIsOff","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_DefaultIsOff (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_DefaultIsOff","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/device"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/device","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/device\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/device","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/device (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/device","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/session"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/session","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/session\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/session","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/session (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/session","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/full"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/full","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/full\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/full","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/full (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/full","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing_with_device_override"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing_with_device_override","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing_with_device_override\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing_with_device_override","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing_with_device_override (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing_with_device_override","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/blank"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/blank","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/blank\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/blank","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/blank (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/blank","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/uppercase"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/uppercase","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/uppercase\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/uppercase","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/uppercase (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/uppercase","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/nil_uuid"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/nil_uuid","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/nil_uuid\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/nil_uuid","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/nil_uuid (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/nil_uuid","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/non_string"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/non_string","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/non_string\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/non_string","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/non_string (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/non_string","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_OffMode"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_OffMode","Output":"=== RUN TestApplyCodexFingerprintHeaders_OffMode\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_OffMode","Output":"--- PASS: TestApplyCodexFingerprintHeaders_OffMode (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_OffMode","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_DeviceMode"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_DeviceMode","Output":"=== RUN TestApplyCodexFingerprintHeaders_DeviceMode\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_DeviceMode","Output":"--- PASS: TestApplyCodexFingerprintHeaders_DeviceMode (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_DeviceMode","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_SessionMode"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_SessionMode","Output":"=== RUN TestApplyCodexFingerprintHeaders_SessionMode\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_SessionMode","Output":"--- PASS: TestApplyCodexFingerprintHeaders_SessionMode (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_SessionMode","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_SessionMode_DifferentClients"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_SessionMode_DifferentClients","Output":"=== RUN TestApplyCodexFingerprintHeaders_SessionMode_DifferentClients\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_SessionMode_DifferentClients","Output":"--- PASS: TestApplyCodexFingerprintHeaders_SessionMode_DifferentClients (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_SessionMode_DifferentClients","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_FullMode"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_FullMode","Output":"=== RUN TestApplyCodexFingerprintHeaders_FullMode\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_FullMode","Output":"--- PASS: TestApplyCodexFingerprintHeaders_FullMode (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_FullMode","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_OffMode"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_OffMode","Output":"=== RUN TestApplyCodexFingerprintClientMetadata_OffMode\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_OffMode","Output":"--- PASS: TestApplyCodexFingerprintClientMetadata_OffMode (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_OffMode","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_DeviceMode"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_DeviceMode","Output":"=== RUN TestApplyCodexFingerprintClientMetadata_DeviceMode\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_DeviceMode","Output":"--- PASS: TestApplyCodexFingerprintClientMetadata_DeviceMode (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_DeviceMode","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_SessionMode"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_SessionMode","Output":"=== RUN TestApplyCodexFingerprintClientMetadata_SessionMode\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_SessionMode","Output":"--- PASS: TestApplyCodexFingerprintClientMetadata_SessionMode (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_SessionMode","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_FullMode"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_FullMode","Output":"=== RUN TestApplyCodexFingerprintClientMetadata_FullMode\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_FullMode","Output":"--- PASS: TestApplyCodexFingerprintClientMetadata_FullMode (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_FullMode","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/session/default"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/session/default","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/session/default\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/session/default","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/session/default (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/session/default","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/full/default"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/full/default","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/full/default\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/full/default","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/full/default (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/full/default","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/explicit_override"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/explicit_override","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/explicit_override\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/explicit_override","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/explicit_override (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/explicit_override","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_Negatives\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_key_is_not_injected"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_key_is_not_injected","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_key_is_not_injected\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_key_is_not_injected","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_key_is_not_injected (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_key_is_not_injected","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/empty_key_preserved"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/empty_key_preserved","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_Negatives/empty_key_preserved\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/empty_key_preserved","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_Negatives/empty_key_preserved (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/empty_key_preserved","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/whitespace-different_key_is_an_explicit_override"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/whitespace-different_key_is_an_explicit_override","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_Negatives/whitespace-different_key_is_an_explicit_override\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/whitespace-different_key_is_an_explicit_override","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_Negatives/whitespace-different_key_is_an_explicit_override (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/whitespace-different_key_is_an_explicit_override","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_key_preserved"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_key_preserved","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_key_preserved\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_key_preserved","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_key_preserved (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_key_preserved","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_source_metadata_preserves_key"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_source_metadata_preserves_key","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_source_metadata_preserves_key\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_source_metadata_preserves_key","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_source_metadata_preserves_key (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_source_metadata_preserves_key","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_source_session_preserves_key"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_source_session_preserves_key","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_source_session_preserves_key\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_source_session_preserves_key","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_source_session_preserves_key (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_source_session_preserves_key","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-object_source_metadata_preserves_key"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-object_source_metadata_preserves_key","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_Negatives/non-object_source_metadata_preserves_key\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-object_source_metadata_preserves_key","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_Negatives/non-object_source_metadata_preserves_key (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-object_source_metadata_preserves_key","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/device_mode_preserves_key"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/device_mode_preserves_key","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_Negatives/device_mode_preserves_key\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/device_mode_preserves_key","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_Negatives/device_mode_preserves_key (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/device_mode_preserves_key","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/off_mode_preserves_body"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/off_mode_preserves_body","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_Negatives/off_mode_preserves_body\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/off_mode_preserves_body","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_Negatives/off_mode_preserves_body (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/off_mode_preserves_body","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_Negatives (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/no_client_metadata"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/no_client_metadata","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/no_client_metadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/no_client_metadata","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/no_client_metadata (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/no_client_metadata","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/non_object_value"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/non_object_value","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/non_object_value\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/non_object_value","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/non_object_value (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/non_object_value","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/object_with_extras"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/object_with_extras","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/object_with_extras\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/object_with_extras","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/object_with_extras (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/object_with_extras","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/no_client_metadata"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/no_client_metadata","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/no_client_metadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/no_client_metadata","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/no_client_metadata (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/no_client_metadata","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/non_object_value"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/non_object_value","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/non_object_value\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/non_object_value","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/non_object_value (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/non_object_value","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/object_with_extras"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/object_with_extras","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/object_with_extras\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/object_with_extras","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/object_with_extras (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/object_with_extras","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/non_object_value"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/non_object_value","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/non_object_value\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/non_object_value","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/non_object_value (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/non_object_value","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/object_with_extras"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/object_with_extras","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/object_with_extras\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/object_with_extras","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/object_with_extras (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/object_with_extras","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/no_client_metadata"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/no_client_metadata","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/no_client_metadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/no_client_metadata","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/no_client_metadata (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/no_client_metadata","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_PreservesUnrelatedFields"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_PreservesUnrelatedFields","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_PreservesUnrelatedFields\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_PreservesUnrelatedFields","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_PreservesUnrelatedFields (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_PreservesUnrelatedFields","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_Noop"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_Noop","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_Noop\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_Noop","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_Noop (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_Noop","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStageCodexFingerprintIDs_NilOverwritesPreviousAccount"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStageCodexFingerprintIDs_NilOverwritesPreviousAccount","Output":"=== RUN TestStageCodexFingerprintIDs_NilOverwritesPreviousAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStageCodexFingerprintIDs_NilOverwritesPreviousAccount","Output":"--- PASS: TestStageCodexFingerprintIDs_NilOverwritesPreviousAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStageCodexFingerprintIDs_NilOverwritesPreviousAccount","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyStagedCodexFingerprintRejectsDifferentOAuthAccount"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyStagedCodexFingerprintRejectsDifferentOAuthAccount","Output":"=== RUN TestApplyStagedCodexFingerprintRejectsDifferentOAuthAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyStagedCodexFingerprintRejectsDifferentOAuthAccount","Output":"--- PASS: TestApplyStagedCodexFingerprintRejectsDifferentOAuthAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyStagedCodexFingerprintRejectsDifferentOAuthAccount","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyStagedCodexFingerprintHeaders_SkipsNonOAuthAccount"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyStagedCodexFingerprintHeaders_SkipsNonOAuthAccount","Output":"=== RUN TestApplyStagedCodexFingerprintHeaders_SkipsNonOAuthAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyStagedCodexFingerprintHeaders_SkipsNonOAuthAccount","Output":"--- PASS: TestApplyStagedCodexFingerprintHeaders_SkipsNonOAuthAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyStagedCodexFingerprintHeaders_SkipsNonOAuthAccount","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestOpenAIPassthrough_AppliesStagedFingerprint"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestOpenAIPassthrough_AppliesStagedFingerprint","Output":"=== RUN TestBuildUpstreamRequestOpenAIPassthrough_AppliesStagedFingerprint\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestOpenAIPassthrough_AppliesStagedFingerprint","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:28.995Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":2001,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestOpenAIPassthrough_AppliesStagedFingerprint","Output":"--- PASS: TestBuildUpstreamRequestOpenAIPassthrough_AppliesStagedFingerprint (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestOpenAIPassthrough_AppliesStagedFingerprint","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestOpenAIPassthrough_OffModeKeepsIsolatedSession"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestOpenAIPassthrough_OffModeKeepsIsolatedSession","Output":"=== RUN TestBuildUpstreamRequestOpenAIPassthrough_OffModeKeepsIsolatedSession\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestOpenAIPassthrough_OffModeKeepsIsolatedSession","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:28.995Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":2002,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestOpenAIPassthrough_OffModeKeepsIsolatedSession","Output":"--- PASS: TestBuildUpstreamRequestOpenAIPassthrough_OffModeKeepsIsolatedSession (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestOpenAIPassthrough_OffModeKeepsIsolatedSession","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_NonObjectBodyUntouched"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_NonObjectBodyUntouched","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_NonObjectBodyUntouched\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_NonObjectBodyUntouched","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_NonObjectBodyUntouched (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_NonObjectBodyUntouched","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders","Output":"=== RUN TestEnsureCodexIdentityHeaders\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders/补齐缺失身份头"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders/补齐缺失身份头","Output":"=== RUN TestEnsureCodexIdentityHeaders/补齐缺失身份头\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders/补齐缺失身份头","Output":"--- PASS: TestEnsureCodexIdentityHeaders/补齐缺失身份头 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders/补齐缺失身份头","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders/官方非_CLI_客户端身份同样被统一"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders/官方非_CLI_客户端身份同样被统一","Output":"=== RUN TestEnsureCodexIdentityHeaders/官方非_CLI_客户端身份同样被统一\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders/官方非_CLI_客户端身份同样被统一","Output":"--- PASS: TestEnsureCodexIdentityHeaders/官方非_CLI_客户端身份同样被统一 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders/官方非_CLI_客户端身份同样被统一","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders","Output":"--- PASS: TestEnsureCodexIdentityHeaders (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders","Output":"=== RUN TestEnforceCodexIdentityHeaders\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/TUI_身份"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/TUI_身份","Output":"=== RUN TestEnforceCodexIdentityHeaders/TUI_身份\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/TUI_身份","Output":"--- PASS: TestEnforceCodexIdentityHeaders/TUI_身份 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/TUI_身份","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/错配_originator"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/错配_originator","Output":"=== RUN TestEnforceCodexIdentityHeaders/错配_originator\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/错配_originator","Output":"--- PASS: TestEnforceCodexIdentityHeaders/错配_originator (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/错配_originator","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/官方_vscode_身份"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/官方_vscode_身份","Output":"=== RUN TestEnforceCodexIdentityHeaders/官方_vscode_身份\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/官方_vscode_身份","Output":"--- PASS: TestEnforceCodexIdentityHeaders/官方_vscode_身份 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/官方_vscode_身份","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/第三方客户端身份"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/第三方客户端身份","Output":"=== RUN TestEnforceCodexIdentityHeaders/第三方客户端身份\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/第三方客户端身份","Output":"--- PASS: TestEnforceCodexIdentityHeaders/第三方客户端身份 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/第三方客户端身份","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/浏览器型_UA(原浏览器兜底已被统一出口吸收)"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/浏览器型_UA(原浏览器兜底已被统一出口吸收)","Output":"=== RUN TestEnforceCodexIdentityHeaders/浏览器型_UA(原浏览器兜底已被统一出口吸收)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/浏览器型_UA(原浏览器兜底已被统一出口吸收)","Output":"--- PASS: TestEnforceCodexIdentityHeaders/浏览器型_UA(原浏览器兜底已被统一出口吸收) (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/浏览器型_UA(原浏览器兜底已被统一出口吸收)","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/UA_缺失"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/UA_缺失","Output":"=== RUN TestEnforceCodexIdentityHeaders/UA_缺失\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/UA_缺失","Output":"--- PASS: TestEnforceCodexIdentityHeaders/UA_缺失 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/UA_缺失","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/originator_override_的真实_TUI_客户端"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/originator_override_的真实_TUI_客户端","Output":"=== RUN TestEnforceCodexIdentityHeaders/originator_override_的真实_TUI_客户端\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/originator_override_的真实_TUI_客户端","Output":"--- PASS: TestEnforceCodexIdentityHeaders/originator_override_的真实_TUI_客户端 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/originator_override_的真实_TUI_客户端","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/陈旧客户端版本"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/陈旧客户端版本","Output":"=== RUN TestEnforceCodexIdentityHeaders/陈旧客户端版本\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/陈旧客户端版本","Output":"--- PASS: TestEnforceCodexIdentityHeaders/陈旧客户端版本 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/陈旧客户端版本","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders","Output":"--- PASS: TestEnforceCodexIdentityHeaders (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA","Output":"=== RUN TestEnforceCodexIdentityHeadersWithAccountOverrideUA\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/官方形态覆写_UA_保留指纹但重建版本段"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/官方形态覆写_UA_保留指纹但重建版本段","Output":"=== RUN TestEnforceCodexIdentityHeadersWithAccountOverrideUA/官方形态覆写_UA_保留指纹但重建版本段\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/官方形态覆写_UA_保留指纹但重建版本段","Output":"--- PASS: TestEnforceCodexIdentityHeadersWithAccountOverrideUA/官方形态覆写_UA_保留指纹但重建版本段 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/官方形态覆写_UA_保留指纹但重建版本段","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/非官方形态覆写_UA_回退规范身份"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/非官方形态覆写_UA_回退规范身份","Output":"=== RUN TestEnforceCodexIdentityHeadersWithAccountOverrideUA/非官方形态覆写_UA_回退规范身份\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/非官方形态覆写_UA_回退规范身份","Output":"--- PASS: TestEnforceCodexIdentityHeadersWithAccountOverrideUA/非官方形态覆写_UA_回退规范身份 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/非官方形态覆写_UA_回退规范身份","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/陈旧覆写_UA_的版本段被重建"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/陈旧覆写_UA_的版本段被重建","Output":"=== RUN TestEnforceCodexIdentityHeadersWithAccountOverrideUA/陈旧覆写_UA_的版本段被重建\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/陈旧覆写_UA_的版本段被重建","Output":"--- PASS: TestEnforceCodexIdentityHeadersWithAccountOverrideUA/陈旧覆写_UA_的版本段被重建 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/陈旧覆写_UA_的版本段被重建","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/陈旧覆写_UA_跟随同步版本"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/陈旧覆写_UA_跟随同步版本","Output":"=== RUN TestEnforceCodexIdentityHeadersWithAccountOverrideUA/陈旧覆写_UA_跟随同步版本\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/陈旧覆写_UA_跟随同步版本","Output":"--- PASS: TestEnforceCodexIdentityHeadersWithAccountOverrideUA/陈旧覆写_UA_跟随同步版本 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/陈旧覆写_UA_跟随同步版本","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA","Output":"--- PASS: TestEnforceCodexIdentityHeadersWithAccountOverrideUA (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersFollowsCanonicalResolver"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersFollowsCanonicalResolver","Output":"=== RUN TestEnforceCodexIdentityHeadersFollowsCanonicalResolver\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersFollowsCanonicalResolver","Output":"--- PASS: TestEnforceCodexIdentityHeadersFollowsCanonicalResolver (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersFollowsCanonicalResolver","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersRejectsInvalidCanonicalUA"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersRejectsInvalidCanonicalUA","Output":"=== RUN TestEnforceCodexIdentityHeadersRejectsInvalidCanonicalUA\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersRejectsInvalidCanonicalUA","Output":"--- PASS: TestEnforceCodexIdentityHeadersRejectsInvalidCanonicalUA (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersRejectsInvalidCanonicalUA","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexIdentityEnforcementZeroValueConfigKeepsItEnabled"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexIdentityEnforcementZeroValueConfigKeepsItEnabled","Output":"=== RUN TestCodexIdentityEnforcementZeroValueConfigKeepsItEnabled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexIdentityEnforcementZeroValueConfigKeepsItEnabled","Output":"--- PASS: TestCodexIdentityEnforcementZeroValueConfigKeepsItEnabled (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexIdentityEnforcementZeroValueConfigKeepsItEnabled","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_EnforcementDisabled"}
- {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_EnforcementDisabled","Output":"=== RUN TestEnforceCodexIdentityHeaders_EnforcementDisabled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_EnforcementDisabled","Output":"--- PASS: TestEnforceCodexIdentityHeaders_EnforcementDisabled (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_EnforcementDisabled","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_EnforcementDisabledThirdPartyFallback"}
- {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_EnforcementDisabledThirdPartyFallback","Output":"=== RUN TestEnforceCodexIdentityHeaders_EnforcementDisabledThirdPartyFallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_EnforcementDisabledThirdPartyFallback","Output":"--- PASS: TestEnforceCodexIdentityHeaders_EnforcementDisabledThirdPartyFallback (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_EnforcementDisabledThirdPartyFallback","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersIsIdempotent"}
- {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersIsIdempotent","Output":"=== RUN TestEnforceCodexIdentityHeadersIsIdempotent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersIsIdempotent","Output":"--- PASS: TestEnforceCodexIdentityHeadersIsIdempotent (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersIsIdempotent","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_NoOriginatorIsNoop"}
- {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_NoOriginatorIsNoop","Output":"=== RUN TestEnforceCodexIdentityHeaders_NoOriginatorIsNoop\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_NoOriginatorIsNoop","Output":"--- PASS: TestEnforceCodexIdentityHeaders_NoOriginatorIsNoop (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_NoOriginatorIsNoop","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexClientVersion"}
- {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexClientVersion","Output":"=== RUN TestNormalizeCodexClientVersion\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexClientVersion","Output":"--- PASS: TestNormalizeCodexClientVersion (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexClientVersion","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexCLIUserAgent"}
- {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexCLIUserAgent","Output":"=== RUN TestBuildCodexCLIUserAgent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexCLIUserAgent","Output":"--- PASS: TestBuildCodexCLIUserAgent (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexCLIUserAgent","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexCanonicalUserAgentFollowsResolver"}
- {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexCanonicalUserAgentFollowsResolver","Output":"=== RUN TestCodexCanonicalUserAgentFollowsResolver\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexCanonicalUserAgentFollowsResolver","Output":"--- PASS: TestCodexCanonicalUserAgentFollowsResolver (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexCanonicalUserAgentFollowsResolver","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexCanonicalUserAgentFallsBackWithoutResolver"}
- {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexCanonicalUserAgentFallsBackWithoutResolver","Output":"=== RUN TestCodexCanonicalUserAgentFallsBackWithoutResolver\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexCanonicalUserAgentFallsBackWithoutResolver","Output":"--- PASS: TestCodexCanonicalUserAgentFallsBackWithoutResolver (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexCanonicalUserAgentFallsBackWithoutResolver","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations"}
- {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations","Output":"=== RUN TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/official_fallback"}
- {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/official_fallback","Output":"=== RUN TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/official_fallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9964708+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/official_fallback","Output":"--- PASS: TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/official_fallback (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9964708+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/official_fallback","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9964708+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/custom_host_has_no_guessed_capability"}
- {"Time":"2026-09-12T11:38:28.9964708+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/custom_host_has_no_guessed_capability","Output":"=== RUN TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/custom_host_has_no_guessed_capability\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9964708+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/custom_host_has_no_guessed_capability","Output":"--- PASS: TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/custom_host_has_no_guessed_capability (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9964708+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/custom_host_has_no_guessed_capability","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9964708+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/missing_peer_capability"}
- {"Time":"2026-09-12T11:38:28.9964708+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/missing_peer_capability","Output":"=== RUN TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/missing_peer_capability\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9964708+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/missing_peer_capability","Output":"--- PASS: TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/missing_peer_capability (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9964708+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/missing_peer_capability","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9964708+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/implemented_chat_bridge"}
- {"Time":"2026-09-12T11:38:28.9964708+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/implemented_chat_bridge","Output":"=== RUN TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/implemented_chat_bridge\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9969848+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/implemented_chat_bridge","Output":"--- PASS: TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/implemented_chat_bridge (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9969848+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/implemented_chat_bridge","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9975049+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations","Output":"--- PASS: TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9975049+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9975049+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesPreserveLiveNullAndFalse"}
- {"Time":"2026-09-12T11:38:28.9975049+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesPreserveLiveNullAndFalse","Output":"=== RUN TestAstraCodexToolCapabilitiesPreserveLiveNullAndFalse\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesPreserveLiveNullAndFalse","Output":"--- PASS: TestAstraCodexToolCapabilitiesPreserveLiveNullAndFalse (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesPreserveLiveNullAndFalse","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesNoneForExplicitNonReasoningMetadata"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesNoneForExplicitNonReasoningMetadata","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesNoneForExplicitNonReasoningMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesNoneForExplicitNonReasoningMetadata","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesNoneForExplicitNonReasoningMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesNoneForExplicitNonReasoningMetadata"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes","Output":"=== RUN TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed","Output":"=== RUN TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed","Output":"=== PAUSE TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata","Output":"=== RUN TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsDifferentMappedTargetsWithoutLeakingAlias"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsDifferentMappedTargetsWithoutLeakingAlias","Output":"=== RUN TestBuildCodexModelsManifestForGroupIntersectsDifferentMappedTargetsWithoutLeakingAlias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsDifferentMappedTargetsWithoutLeakingAlias","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupIntersectsDifferentMappedTargetsWithoutLeakingAlias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsDifferentMappedTargetsWithoutLeakingAlias"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsTransientlyUnschedulableMappedAccounts"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsTransientlyUnschedulableMappedAccounts","Output":"=== RUN TestBuildCodexModelsManifestForGroupIntersectsTransientlyUnschedulableMappedAccounts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsTransientlyUnschedulableMappedAccounts","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupIntersectsTransientlyUnschedulableMappedAccounts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsTransientlyUnschedulableMappedAccounts"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIgnoresPersistentlyDisabledMappedAccounts"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIgnoresPersistentlyDisabledMappedAccounts","Output":"=== RUN TestBuildCodexModelsManifestForGroupIgnoresPersistentlyDisabledMappedAccounts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIgnoresPersistentlyDisabledMappedAccounts","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupIgnoresPersistentlyDisabledMappedAccounts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIgnoresPersistentlyDisabledMappedAccounts"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackToSchedulableWhenAvailabilityLookupFails"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackToSchedulableWhenAvailabilityLookupFails","Output":"=== RUN TestBuildCodexModelsManifestForGroupFallsBackToSchedulableWhenAvailabilityLookupFails\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackToSchedulableWhenAvailabilityLookupFails","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupFallsBackToSchedulableWhenAvailabilityLookupFails\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackToSchedulableWhenAvailabilityLookupFails"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupKeepsCrossPlatformAliasAmbiguityClosed"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupKeepsCrossPlatformAliasAmbiguityClosed","Output":"=== RUN TestBuildCodexModelsManifestForGroupKeepsCrossPlatformAliasAmbiguityClosed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupKeepsCrossPlatformAliasAmbiguityClosed","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupKeepsCrossPlatformAliasAmbiguityClosed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupKeepsCrossPlatformAliasAmbiguityClosed"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupDoesNotAdvertiseNoneWhenAccountReasoningConflicts"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupDoesNotAdvertiseNoneWhenAccountReasoningConflicts","Output":"=== RUN TestBuildCodexModelsManifestForGroupDoesNotAdvertiseNoneWhenAccountReasoningConflicts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupDoesNotAdvertiseNoneWhenAccountReasoningConflicts","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupDoesNotAdvertiseNoneWhenAccountReasoningConflicts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupDoesNotAdvertiseNoneWhenAccountReasoningConflicts"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesFollowAPIKeyAlias"}
- {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesFollowAPIKeyAlias","Output":"=== RUN TestAstraCodexToolCapabilitiesFollowAPIKeyAlias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9995572+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesFollowAPIKeyAlias","Output":"--- PASS: TestAstraCodexToolCapabilitiesFollowAPIKeyAlias (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:28.9995572+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesFollowAPIKeyAlias","Elapsed":0}
- {"Time":"2026-09-12T11:38:28.9995572+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesKeepAPIKeyResponsesLiteGuard"}
- {"Time":"2026-09-12T11:38:28.9995572+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesKeepAPIKeyResponsesLiteGuard","Output":"=== RUN TestAstraCodexToolCapabilitiesKeepAPIKeyResponsesLiteGuard\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0000676+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesKeepAPIKeyResponsesLiteGuard","Output":"--- PASS: TestAstraCodexToolCapabilitiesKeepAPIKeyResponsesLiteGuard (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0000676+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesKeepAPIKeyResponsesLiteGuard","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0000676+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting"}
- {"Time":"2026-09-12T11:38:29.0000676+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting","Output":"=== RUN TestCodexAliasFailoverMappingHonorsModelRouting\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0000676+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/no_routing_rule_still_fails_closed"}
- {"Time":"2026-09-12T11:38:29.0000676+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/no_routing_rule_still_fails_closed","Output":"=== RUN TestCodexAliasFailoverMappingHonorsModelRouting/no_routing_rule_still_fails_closed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0000676+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/no_routing_rule_still_fails_closed","Output":"--- PASS: TestCodexAliasFailoverMappingHonorsModelRouting/no_routing_rule_still_fails_closed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0000676+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/no_routing_rule_still_fails_closed","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0000676+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/routing_rule_resolves_the_alias"}
- {"Time":"2026-09-12T11:38:29.0000676+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/routing_rule_resolves_the_alias","Output":"=== RUN TestCodexAliasFailoverMappingHonorsModelRouting/routing_rule_resolves_the_alias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0000676+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/routing_rule_resolves_the_alias","Output":"--- PASS: TestCodexAliasFailoverMappingHonorsModelRouting/routing_rule_resolves_the_alias (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0000676+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/routing_rule_resolves_the_alias","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0000676+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/routing_disabled_falls_back_to_failing_closed"}
- {"Time":"2026-09-12T11:38:29.0000676+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/routing_disabled_falls_back_to_failing_closed","Output":"=== RUN TestCodexAliasFailoverMappingHonorsModelRouting/routing_disabled_falls_back_to_failing_closed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/routing_disabled_falls_back_to_failing_closed","Output":"--- PASS: TestCodexAliasFailoverMappingHonorsModelRouting/routing_disabled_falls_back_to_failing_closed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/routing_disabled_falls_back_to_failing_closed","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/routing_rule_for_another_alias_does_not_leak"}
- {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/routing_rule_for_another_alias_does_not_leak","Output":"=== RUN TestCodexAliasFailoverMappingHonorsModelRouting/routing_rule_for_another_alias_does_not_leak\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/routing_rule_for_another_alias_does_not_leak","Output":"--- PASS: TestCodexAliasFailoverMappingHonorsModelRouting/routing_rule_for_another_alias_does_not_leak (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/routing_rule_for_another_alias_does_not_leak","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting","Output":"--- PASS: TestCodexAliasFailoverMappingHonorsModelRouting (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexModelIDsForGroupOmitsWildcardKeys"}
- {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexModelIDsForGroupOmitsWildcardKeys","Output":"=== RUN TestFilterCodexModelIDsForGroupOmitsWildcardKeys\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexModelIDsForGroupOmitsWildcardKeys","Output":"=== PAUSE TestFilterCodexModelIDsForGroupOmitsWildcardKeys\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexModelIDsForGroupOmitsWildcardKeys"}
- {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback"}
- {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback","Output":"=== RUN TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback","Output":"=== PAUSE TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback"}
- {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesGPT6AstraInstructions"}
- {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesGPT6AstraInstructions","Output":"=== RUN TestBuildCodexModelsManifestUsesGPT6AstraInstructions\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesGPT6AstraInstructions","Output":"--- PASS: TestBuildCodexModelsManifestUsesGPT6AstraInstructions (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesGPT6AstraInstructions","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesSingleNoneReasoningChoiceForCustomModel"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesSingleNoneReasoningChoiceForCustomModel","Output":"=== RUN TestBuildCodexModelsManifestUsesSingleNoneReasoningChoiceForCustomModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesSingleNoneReasoningChoiceForCustomModel","Output":"=== PAUSE TestBuildCodexModelsManifestUsesSingleNoneReasoningChoiceForCustomModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesSingleNoneReasoningChoiceForCustomModel"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestKeepsKnownReasoningChoices"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestKeepsKnownReasoningChoices","Output":"=== RUN TestBuildCodexModelsManifestKeepsKnownReasoningChoices\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestKeepsKnownReasoningChoices","Output":"=== PAUSE TestBuildCodexModelsManifestKeepsKnownReasoningChoices\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestKeepsKnownReasoningChoices"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels","Output":"=== RUN TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels","Output":"=== PAUSE TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesUltrafastServiceTierForSol"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesUltrafastServiceTierForSol","Output":"=== RUN TestBuildCodexModelsManifestAdvertisesUltrafastServiceTierForSol\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesUltrafastServiceTierForSol","Output":"=== PAUSE TestBuildCodexModelsManifestAdvertisesUltrafastServiceTierForSol\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesUltrafastServiceTierForSol"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestLeavesServiceTiersEmptyForOtherModels"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestLeavesServiceTiersEmptyForOtherModels","Output":"=== RUN TestBuildCodexModelsManifestLeavesServiceTiersEmptyForOtherModels\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestLeavesServiceTiersEmptyForOtherModels","Output":"=== PAUSE TestBuildCodexModelsManifestLeavesServiceTiersEmptyForOtherModels\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestLeavesServiceTiersEmptyForOtherModels"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestOmitsDedicatedImageModels"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestOmitsDedicatedImageModels","Output":"=== RUN TestBuildCodexModelsManifestOmitsDedicatedImageModels\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestOmitsDedicatedImageModels","Output":"=== PAUSE TestBuildCodexModelsManifestOmitsDedicatedImageModels\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestOmitsDedicatedImageModels"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialGrokResponsesImageInput"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialGrokResponsesImageInput","Output":"=== RUN TestBuildCodexModelsManifestForGroupAdvertisesOfficialGrokResponsesImageInput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialGrokResponsesImageInput","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupAdvertisesOfficialGrokResponsesImageInput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialGrokResponsesImageInput"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialOpenAIResponsesImageInput"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialOpenAIResponsesImageInput","Output":"=== RUN TestBuildCodexModelsManifestForGroupAdvertisesOfficialOpenAIResponsesImageInput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialOpenAIResponsesImageInput","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupAdvertisesOfficialOpenAIResponsesImageInput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialOpenAIResponsesImageInput"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities","Output":"=== RUN TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesExplicitCompositeResponsesRouteModel"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesExplicitCompositeResponsesRouteModel","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesExplicitCompositeResponsesRouteModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesExplicitCompositeResponsesRouteModel","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesExplicitCompositeResponsesRouteModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesExplicitCompositeResponsesRouteModel"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesAccountMappingOwnershipAndMappedModel"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesAccountMappingOwnershipAndMappedModel","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesAccountMappingOwnershipAndMappedModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesAccountMappingOwnershipAndMappedModel","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesAccountMappingOwnershipAndMappedModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesAccountMappingOwnershipAndMappedModel"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesMappedTargetMetadataForCompositeAlias"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesMappedTargetMetadataForCompositeAlias","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesMappedTargetMetadataForCompositeAlias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesMappedTargetMetadataForCompositeAlias","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesMappedTargetMetadataForCompositeAlias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesMappedTargetMetadataForCompositeAlias"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSafeFallbackForConflictingAliasTargets"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSafeFallbackForConflictingAliasTargets","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesSafeFallbackForConflictingAliasTargets\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSafeFallbackForConflictingAliasTargets","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesSafeFallbackForConflictingAliasTargets\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSafeFallbackForConflictingAliasTargets"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupOmitsDedicatedMediaTargetAlias"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupOmitsDedicatedMediaTargetAlias","Output":"=== RUN TestBuildCodexModelsManifestForGroupOmitsDedicatedMediaTargetAlias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupOmitsDedicatedMediaTargetAlias","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupOmitsDedicatedMediaTargetAlias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupOmitsDedicatedMediaTargetAlias"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupLoadsAccountsOnce"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupLoadsAccountsOnce","Output":"=== RUN TestBuildCodexModelsManifestForGroupLoadsAccountsOnce\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupLoadsAccountsOnce","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupLoadsAccountsOnce\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupLoadsAccountsOnce"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackWhenCapabilityLookupFails"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackWhenCapabilityLookupFails","Output":"=== RUN TestBuildCodexModelsManifestForGroupFallsBackWhenCapabilityLookupFails\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackWhenCapabilityLookupFails","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupFallsBackWhenCapabilityLookupFails\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackWhenCapabilityLookupFails"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsInjectsCurrentGroupAliases"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsInjectsCurrentGroupAliases","Output":"=== RUN TestMergeGroupConfiguredCodexModelsInjectsCurrentGroupAliases\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsInjectsCurrentGroupAliases","Output":"=== PAUSE TestMergeGroupConfiguredCodexModelsInjectsCurrentGroupAliases\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsInjectsCurrentGroupAliases"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestUsesAdministratorConfiguration"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestUsesAdministratorConfiguration","Output":"=== RUN TestBuildGroupConfiguredCodexModelsManifestUsesAdministratorConfiguration\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestUsesAdministratorConfiguration","Output":"=== PAUSE TestBuildGroupConfiguredCodexModelsManifestUsesAdministratorConfiguration\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestUsesAdministratorConfiguration"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestExpandsSelectedModelCoveredByWildcardMapping"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestExpandsSelectedModelCoveredByWildcardMapping","Output":"=== RUN TestBuildGroupConfiguredCodexModelsManifestExpandsSelectedModelCoveredByWildcardMapping\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestExpandsSelectedModelCoveredByWildcardMapping","Output":"=== PAUSE TestBuildGroupConfiguredCodexModelsManifestExpandsSelectedModelCoveredByWildcardMapping\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestExpandsSelectedModelCoveredByWildcardMapping"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts","Output":"=== RUN TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts","Output":"=== PAUSE TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIgnoresPersistentlyDisabledMappedAccounts"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIgnoresPersistentlyDisabledMappedAccounts","Output":"=== RUN TestBuildGroupConfiguredCodexModelsManifestIgnoresPersistentlyDisabledMappedAccounts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIgnoresPersistentlyDisabledMappedAccounts","Output":"=== PAUSE TestBuildGroupConfiguredCodexModelsManifestIgnoresPersistentlyDisabledMappedAccounts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIgnoresPersistentlyDisabledMappedAccounts"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestFallsThroughWithoutConfiguration"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestFallsThroughWithoutConfiguration","Output":"=== RUN TestBuildGroupConfiguredCodexModelsManifestFallsThroughWithoutConfiguration\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestFallsThroughWithoutConfiguration","Output":"=== PAUSE TestBuildGroupConfiguredCodexModelsManifestFallsThroughWithoutConfiguration\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestFallsThroughWithoutConfiguration"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAutoReviewByDefault"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAutoReviewByDefault","Output":"=== RUN TestMergeGroupConfiguredCodexModelsFiltersAutoReviewByDefault\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAutoReviewByDefault","Output":"=== PAUSE TestMergeGroupConfiguredCodexModelsFiltersAutoReviewByDefault\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAutoReviewByDefault"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAccountMappedAutoReviewByDefault"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAccountMappedAutoReviewByDefault","Output":"=== RUN TestMergeGroupConfiguredCodexModelsFiltersAccountMappedAutoReviewByDefault\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAccountMappedAutoReviewByDefault","Output":"=== PAUSE TestMergeGroupConfiguredCodexModelsFiltersAccountMappedAutoReviewByDefault\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAccountMappedAutoReviewByDefault"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsKeepsExplicitAutoReviewSelection"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsKeepsExplicitAutoReviewSelection","Output":"=== RUN TestMergeGroupConfiguredCodexModelsKeepsExplicitAutoReviewSelection\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsKeepsExplicitAutoReviewSelection","Output":"=== PAUSE TestMergeGroupConfiguredCodexModelsKeepsExplicitAutoReviewSelection\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsKeepsExplicitAutoReviewSelection"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsHonorsCustomListAndFinalETag"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsHonorsCustomListAndFinalETag","Output":"=== RUN TestMergeGroupConfiguredCodexModelsHonorsCustomListAndFinalETag\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsHonorsCustomListAndFinalETag","Output":"=== PAUSE TestMergeGroupConfiguredCodexModelsHonorsCustomListAndFinalETag\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsHonorsCustomListAndFinalETag"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/nil"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/nil","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/nil\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/nil","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/nil (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/nil","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/configuration_error"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/configuration_error","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/configuration_error\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/configuration_error","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/configuration_error (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/configuration_error","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/upstream_configuration_error"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/upstream_configuration_error","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/upstream_configuration_error\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/upstream_configuration_error","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/upstream_configuration_error (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/upstream_configuration_error","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/proxy_connection_configuration_error"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/proxy_connection_configuration_error","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/proxy_connection_configuration_error\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/proxy_connection_configuration_error","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/proxy_connection_configuration_error (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/proxy_connection_configuration_error","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/canceled_request"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/canceled_request","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/canceled_request\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/canceled_request","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/canceled_request (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/canceled_request","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/redirect_policy_error"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/redirect_policy_error","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/redirect_policy_error\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/redirect_policy_error","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/redirect_policy_error (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/redirect_policy_error","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/deadline_exceeded"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/deadline_exceeded","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/deadline_exceeded\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/deadline_exceeded","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/deadline_exceeded (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/deadline_exceeded","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/unexpected_EOF"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/unexpected_EOF","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/unexpected_EOF\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/unexpected_EOF","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/unexpected_EOF (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/unexpected_EOF","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/closed_connection"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/closed_connection","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/closed_connection\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/closed_connection","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/closed_connection (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/closed_connection","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/network_operation"}
- {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/network_operation","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/network_operation\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/network_operation","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/network_operation (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/network_operation","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/DNS_error"}
- {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/DNS_error","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/DNS_error\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/DNS_error","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/DNS_error (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/DNS_error","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/typed_HTTP2_GOAWAY"}
- {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/typed_HTTP2_GOAWAY","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/typed_HTTP2_GOAWAY\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/typed_HTTP2_GOAWAY","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/typed_HTTP2_GOAWAY (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/typed_HTTP2_GOAWAY","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_GOAWAY"}
- {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_GOAWAY","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_GOAWAY\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_GOAWAY","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_GOAWAY (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_GOAWAY","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_refused_stream"}
- {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_refused_stream","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_refused_stream\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_refused_stream","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_refused_stream (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_refused_stream","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_connection_error"}
- {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_connection_error","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_connection_error\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_connection_error","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_connection_error (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_connection_error","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus"}
- {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus","Output":"=== RUN TestIsRetryableCodexModelsManifestStatus\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus","Output":"=== PAUSE TestIsRetryableCodexModelsManifestStatus\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus"}
- {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestPassthrough"}
- {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestPassthrough","Output":"=== RUN TestFetchCodexModelsManifestPassthrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0021068+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestPassthrough","Output":"--- PASS: TestFetchCodexModelsManifestPassthrough (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0021068+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestPassthrough","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0021068+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityUsesAssertionWithoutOAuthToken"}
- {"Time":"2026-09-12T11:38:29.0021068+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityUsesAssertionWithoutOAuthToken","Output":"=== RUN TestFetchCodexModelsManifestAgentIdentityUsesAssertionWithoutOAuthToken\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0026159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityUsesAssertionWithoutOAuthToken","Output":"--- PASS: TestFetchCodexModelsManifestAgentIdentityUsesAssertionWithoutOAuthToken (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0026159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityUsesAssertionWithoutOAuthToken","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0026159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityRecoversInvalidTaskOnce"}
- {"Time":"2026-09-12T11:38:29.0026159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityRecoversInvalidTaskOnce","Output":"=== RUN TestFetchCodexModelsManifestAgentIdentityRecoversInvalidTaskOnce\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0036357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityRecoversInvalidTaskOnce","Output":"--- PASS: TestFetchCodexModelsManifestAgentIdentityRecoversInvalidTaskOnce (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0036357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityRecoversInvalidTaskOnce","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0036357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityRedactsUpstreamErrors"}
- {"Time":"2026-09-12T11:38:29.0036357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityRedactsUpstreamErrors","Output":"=== RUN TestFetchCodexModelsManifestAgentIdentityRedactsUpstreamErrors\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.004162+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityRedactsUpstreamErrors","Output":"--- PASS: TestFetchCodexModelsManifestAgentIdentityRedactsUpstreamErrors (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.004162+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityRedactsUpstreamErrors","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.004162+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestDefaultClientVersion"}
- {"Time":"2026-09-12T11:38:29.004162+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestDefaultClientVersion","Output":"=== RUN TestFetchCodexModelsManifestDefaultClientVersion\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0046746+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestDefaultClientVersion","Output":"--- PASS: TestFetchCodexModelsManifestDefaultClientVersion (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0046746+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestDefaultClientVersion","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0046746+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestNotModified"}
- {"Time":"2026-09-12T11:38:29.0046746+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestNotModified","Output":"=== RUN TestFetchCodexModelsManifestNotModified\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0051894+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestNotModified","Output":"--- PASS: TestFetchCodexModelsManifestNotModified (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0051894+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestNotModified","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0051894+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestUpstreamError"}
- {"Time":"2026-09-12T11:38:29.0051894+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestUpstreamError","Output":"=== RUN TestFetchCodexModelsManifestUpstreamError\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0056981+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestUpstreamError","Output":"--- PASS: TestFetchCodexModelsManifestUpstreamError (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0056981+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestUpstreamError","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0056981+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestMissingToken"}
- {"Time":"2026-09-12T11:38:29.0056981+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestMissingToken","Output":"=== RUN TestFetchCodexModelsManifestMissingToken\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0056981+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestMissingToken","Output":"--- PASS: TestFetchCodexModelsManifestMissingToken (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0056981+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestMissingToken","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0056981+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCustomUpstream"}
- {"Time":"2026-09-12T11:38:29.0056981+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCustomUpstream","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyCustomUpstream\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0062139+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCustomUpstream","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyCustomUpstream (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0062139+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCustomUpstream","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0062139+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCompleteBodyWithoutUpstreamETagUsesFinalBodyETag"}
- {"Time":"2026-09-12T11:38:29.0062139+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCompleteBodyWithoutUpstreamETagUsesFinalBodyETag","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyCompleteBodyWithoutUpstreamETagUsesFinalBodyETag\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0077376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCompleteBodyWithoutUpstreamETagUsesFinalBodyETag","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyCompleteBodyWithoutUpstreamETagUsesFinalBodyETag (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0077376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCompleteBodyWithoutUpstreamETagUsesFinalBodyETag","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0077376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyConvertsStandardOpenAIModelList"}
- {"Time":"2026-09-12T11:38:29.0077376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyConvertsStandardOpenAIModelList","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyConvertsStandardOpenAIModelList\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0082543+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyConvertsStandardOpenAIModelList","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyConvertsStandardOpenAIModelList (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0082543+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyConvertsStandardOpenAIModelList","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0082543+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestUsesCompleteDescriptors"}
- {"Time":"2026-09-12T11:38:29.0082543+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestUsesCompleteDescriptors","Output":"=== RUN TestConvertOpenAIModelListToCodexManifestUsesCompleteDescriptors\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestUsesCompleteDescriptors","Output":"--- PASS: TestConvertOpenAIModelListToCodexManifestUsesCompleteDescriptors (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestUsesCompleteDescriptors","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientPreservesProviderMetadata"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientPreservesProviderMetadata","Output":"=== RUN TestCompleteAPIKeyCodexModelsManifestForClientPreservesProviderMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientPreservesProviderMetadata","Output":"=== PAUSE TestCompleteAPIKeyCodexModelsManifestForClientPreservesProviderMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientPreservesProviderMetadata"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback","Output":"=== RUN TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback","Output":"=== PAUSE TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesSyncedMetadataForConvertedModelList"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesSyncedMetadataForConvertedModelList","Output":"=== RUN TestCompleteAPIKeyCodexModelsManifestForClientUsesSyncedMetadataForConvertedModelList\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesSyncedMetadataForConvertedModelList","Output":"=== PAUSE TestCompleteAPIKeyCodexModelsManifestForClientUsesSyncedMetadataForConvertedModelList\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesSyncedMetadataForConvertedModelList"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFillsMissingProviderFieldsWithoutOverwritingExplicitMetadata"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFillsMissingProviderFieldsWithoutOverwritingExplicitMetadata","Output":"=== RUN TestCompleteAPIKeyCodexModelsManifestForClientFillsMissingProviderFieldsWithoutOverwritingExplicitMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFillsMissingProviderFieldsWithoutOverwritingExplicitMetadata","Output":"=== PAUSE TestCompleteAPIKeyCodexModelsManifestForClientFillsMissingProviderFieldsWithoutOverwritingExplicitMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFillsMissingProviderFieldsWithoutOverwritingExplicitMetadata"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesCurrentSnapshotForCachedNativeManifest"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesCurrentSnapshotForCachedNativeManifest","Output":"=== RUN TestCompleteAPIKeyCodexModelsManifestForClientUsesCurrentSnapshotForCachedNativeManifest\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesCurrentSnapshotForCachedNativeManifest","Output":"=== PAUSE TestCompleteAPIKeyCodexModelsManifestForClientUsesCurrentSnapshotForCachedNativeManifest\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesCurrentSnapshotForCachedNativeManifest"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientMarksOnlyOfficialVisionGPTImageInput"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientMarksOnlyOfficialVisionGPTImageInput","Output":"=== RUN TestCompleteAPIKeyCodexModelsManifestForClientMarksOnlyOfficialVisionGPTImageInput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientMarksOnlyOfficialVisionGPTImageInput","Output":"=== PAUSE TestCompleteAPIKeyCodexModelsManifestForClientMarksOnlyOfficialVisionGPTImageInput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientMarksOnlyOfficialVisionGPTImageInput"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFiltersOfficialNonAgentModels"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFiltersOfficialNonAgentModels","Output":"=== RUN TestCompleteAPIKeyCodexModelsManifestForClientFiltersOfficialNonAgentModels\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFiltersOfficialNonAgentModels","Output":"=== PAUSE TestCompleteAPIKeyCodexModelsManifestForClientFiltersOfficialNonAgentModels\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFiltersOfficialNonAgentModels"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest","Output":"=== RUN TestAdjustAPIKeyCodexModelsManifest\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest/affected_models_disable_responses_lite_and_preserve_unknown_fields"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest/affected_models_disable_responses_lite_and_preserve_unknown_fields","Output":"=== RUN TestAdjustAPIKeyCodexModelsManifest/affected_models_disable_responses_lite_and_preserve_unknown_fields\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest/affected_models_disable_responses_lite_and_preserve_unknown_fields","Output":"--- PASS: TestAdjustAPIKeyCodexModelsManifest/affected_models_disable_responses_lite_and_preserve_unknown_fields (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest/affected_models_disable_responses_lite_and_preserve_unknown_fields","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest/unaffected_model_unchanged"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest/unaffected_model_unchanged","Output":"=== RUN TestAdjustAPIKeyCodexModelsManifest/unaffected_model_unchanged\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest/unaffected_model_unchanged","Output":"--- PASS: TestAdjustAPIKeyCodexModelsManifest/unaffected_model_unchanged (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest/unaffected_model_unchanged","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest/false_missing_and_alternate_entries_unchanged"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest/false_missing_and_alternate_entries_unchanged","Output":"=== RUN TestAdjustAPIKeyCodexModelsManifest/false_missing_and_alternate_entries_unchanged\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest/false_missing_and_alternate_entries_unchanged","Output":"--- PASS: TestAdjustAPIKeyCodexModelsManifest/false_missing_and_alternate_entries_unchanged (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest/false_missing_and_alternate_entries_unchanged","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest","Output":"--- PASS: TestAdjustAPIKeyCodexModelsManifest (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDisablesResponsesLiteForAffectedModels"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDisablesResponsesLiteForAffectedModels","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyDisablesResponsesLiteForAffectedModels\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDisablesResponsesLiteForAffectedModels","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyDisablesResponsesLiteForAffectedModels (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDisablesResponsesLiteForAffectedModels","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthPreservesResponsesLite"}
- {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthPreservesResponsesLite","Output":"=== RUN TestFetchCodexModelsManifestOAuthPreservesResponsesLite\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthPreservesResponsesLite","Output":"--- PASS: TestFetchCodexModelsManifestOAuthPreservesResponsesLite (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthPreservesResponsesLite","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCompleteCodexManifest"}
- {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCompleteCodexManifest","Output":"=== RUN TestConvertOpenAIModelListToCompleteCodexManifest\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCompleteCodexManifest","Output":"=== PAUSE TestConvertOpenAIModelListToCompleteCodexManifest\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCompleteCodexManifest"}
- {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged"}
- {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged","Output":"=== RUN TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/codex_manifest_unchanged"}
- {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/codex_manifest_unchanged","Output":"=== RUN TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/codex_manifest_unchanged\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/codex_manifest_unchanged","Output":"--- PASS: TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/codex_manifest_unchanged (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/codex_manifest_unchanged","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/empty_data_unchanged"}
- {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/empty_data_unchanged","Output":"=== RUN TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/empty_data_unchanged\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/empty_data_unchanged","Output":"--- PASS: TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/empty_data_unchanged (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/empty_data_unchanged","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/data_not_an_array_unchanged"}
- {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/data_not_an_array_unchanged","Output":"=== RUN TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/data_not_an_array_unchanged\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/data_not_an_array_unchanged","Output":"--- PASS: TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/data_not_an_array_unchanged (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/data_not_an_array_unchanged","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/entries_without_usable_IDs_unchanged"}
- {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/entries_without_usable_IDs_unchanged","Output":"=== RUN TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/entries_without_usable_IDs_unchanged\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/entries_without_usable_IDs_unchanged","Output":"--- PASS: TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/entries_without_usable_IDs_unchanged (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/entries_without_usable_IDs_unchanged","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/invalid_JSON_unchanged"}
- {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/invalid_JSON_unchanged","Output":"=== RUN TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/invalid_JSON_unchanged\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/invalid_JSON_unchanged","Output":"--- PASS: TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/invalid_JSON_unchanged (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/invalid_JSON_unchanged","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/non-object_unchanged"}
- {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/non-object_unchanged","Output":"=== RUN TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/non-object_unchanged\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/non-object_unchanged","Output":"--- PASS: TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/non-object_unchanged (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/non-object_unchanged","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged","Output":"--- PASS: TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestUsesConfiguredBodyLimit"}
- {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestUsesConfiguredBodyLimit","Output":"=== RUN TestFetchCodexModelsManifestUsesConfiguredBodyLimit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestUsesConfiguredBodyLimit","Output":"--- PASS: TestFetchCodexModelsManifestUsesConfiguredBodyLimit (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestUsesConfiguredBodyLimit","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAcceptsConfiguredLimitAboveLegacyBoundary"}
- {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAcceptsConfiguredLimitAboveLegacyBoundary","Output":"=== RUN TestFetchCodexModelsManifestAcceptsConfiguredLimitAboveLegacyBoundary\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAcceptsConfiguredLimitAboveLegacyBoundary","Output":"--- PASS: TestFetchCodexModelsManifestAcceptsConfiguredLimitAboveLegacyBoundary (0.06s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAcceptsConfiguredLimitAboveLegacyBoundary","Elapsed":0.06}
- {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope"}
- {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope","Output":"=== RUN TestFetchCodexModelsManifestRejectsInvalidEnvelope\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/OpenAI_models_list"}
- {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/OpenAI_models_list","Output":"=== RUN TestFetchCodexModelsManifestRejectsInvalidEnvelope/OpenAI_models_list\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/OpenAI_models_list","Output":"--- PASS: TestFetchCodexModelsManifestRejectsInvalidEnvelope/OpenAI_models_list (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/OpenAI_models_list","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/invalid_JSON"}
- {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/invalid_JSON","Output":"=== RUN TestFetchCodexModelsManifestRejectsInvalidEnvelope/invalid_JSON\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/invalid_JSON","Output":"--- PASS: TestFetchCodexModelsManifestRejectsInvalidEnvelope/invalid_JSON (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/invalid_JSON","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/non-object"}
- {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/non-object","Output":"=== RUN TestFetchCodexModelsManifestRejectsInvalidEnvelope/non-object\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/non-object","Output":"--- PASS: TestFetchCodexModelsManifestRejectsInvalidEnvelope/non-object (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/non-object","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/null_object"}
- {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/null_object","Output":"=== RUN TestFetchCodexModelsManifestRejectsInvalidEnvelope/null_object\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/null_object","Output":"--- PASS: TestFetchCodexModelsManifestRejectsInvalidEnvelope/null_object (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/null_object","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/missing_models"}
- {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/missing_models","Output":"=== RUN TestFetchCodexModelsManifestRejectsInvalidEnvelope/missing_models\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/missing_models","Output":"--- PASS: TestFetchCodexModelsManifestRejectsInvalidEnvelope/missing_models (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/missing_models","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/models_object"}
- {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/models_object","Output":"=== RUN TestFetchCodexModelsManifestRejectsInvalidEnvelope/models_object\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/models_object","Output":"--- PASS: TestFetchCodexModelsManifestRejectsInvalidEnvelope/models_object (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/models_object","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/models_null"}
- {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/models_null","Output":"=== RUN TestFetchCodexModelsManifestRejectsInvalidEnvelope/models_null\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0670124+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/models_null","Output":"--- PASS: TestFetchCodexModelsManifestRejectsInvalidEnvelope/models_null (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0670124+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/models_null","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0670124+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope","Output":"--- PASS: TestFetchCodexModelsManifestRejectsInvalidEnvelope (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0670124+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0670124+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDoesNotCacheInvalidEnvelope"}
- {"Time":"2026-09-12T11:38:29.0670124+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDoesNotCacheInvalidEnvelope","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyDoesNotCacheInvalidEnvelope\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0670124+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDoesNotCacheInvalidEnvelope","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyDoesNotCacheInvalidEnvelope (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.0670124+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDoesNotCacheInvalidEnvelope","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.0670124+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeySharedRefreshSurvivesCallerCancellation"}
- {"Time":"2026-09-12T11:38:29.0670124+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeySharedRefreshSurvivesCallerCancellation","Output":"=== RUN TestFetchCodexModelsManifestAPIKeySharedRefreshSurvivesCallerCancellation\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.1174432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeySharedRefreshSurvivesCallerCancellation","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeySharedRefreshSurvivesCallerCancellation (0.05s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.1174432+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeySharedRefreshSurvivesCallerCancellation","Elapsed":0.05}
- {"Time":"2026-09-12T11:38:29.1174432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyConcurrentRequestsShareRefresh"}
- {"Time":"2026-09-12T11:38:29.1174432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyConcurrentRequestsShareRefresh","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyConcurrentRequestsShareRefresh\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.1679622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyConcurrentRequestsShareRefresh","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyConcurrentRequestsShareRefresh (0.05s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.1679622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyConcurrentRequestsShareRefresh","Elapsed":0.05}
- {"Time":"2026-09-12T11:38:29.1679622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyFreshCacheHandlesETagLocally"}
- {"Time":"2026-09-12T11:38:29.1679622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyFreshCacheHandlesETagLocally","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyFreshCacheHandlesETagLocally\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.1679622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyFreshCacheHandlesETagLocally","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyFreshCacheHandlesETagLocally (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.1679622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyFreshCacheHandlesETagLocally","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.1679622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheSurvivesClientMutation"}
- {"Time":"2026-09-12T11:38:29.1679622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheSurvivesClientMutation","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyCacheSurvivesClientMutation\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.1711645+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheSurvivesClientMutation","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyCacheSurvivesClientMutation (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.1711645+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheSurvivesClientMutation","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.1711645+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheKeyIsolatesRequestIdentity"}
- {"Time":"2026-09-12T11:38:29.1711645+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheKeyIsolatesRequestIdentity","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyCacheKeyIsolatesRequestIdentity\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.1716761+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheKeyIsolatesRequestIdentity","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyCacheKeyIsolatesRequestIdentity (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.1716761+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheKeyIsolatesRequestIdentity","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.1716761+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheBoundsEntriesAndBodySize"}
- {"Time":"2026-09-12T11:38:29.1716761+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheBoundsEntriesAndBodySize","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyCacheBoundsEntriesAndBodySize\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.1952232+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheBoundsEntriesAndBodySize","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyCacheBoundsEntriesAndBodySize (0.02s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.1952232+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheBoundsEntriesAndBodySize","Elapsed":0.02}
- {"Time":"2026-09-12T11:38:29.1952232+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyServesStaleWhileRefreshing"}
- {"Time":"2026-09-12T11:38:29.1952232+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyServesStaleWhileRefreshing","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyServesStaleWhileRefreshing\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyServesStaleWhileRefreshing","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyServesStaleWhileRefreshing (0.01s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyServesStaleWhileRefreshing","Elapsed":0.01}
- {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyRevalidatesStaleETag"}
- {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyRevalidatesStaleETag","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyRevalidatesStaleETag\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyRevalidatesStaleETag","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyRevalidatesStaleETag (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyRevalidatesStaleETag","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyColdCacheHandlesNotModifiedLocally"}
- {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyColdCacheHandlesNotModifiedLocally","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyColdCacheHandlesNotModifiedLocally\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyColdCacheHandlesNotModifiedLocally","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyColdCacheHandlesNotModifiedLocally (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyColdCacheHandlesNotModifiedLocally","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDoesNotCacheUnexpectedColdNotModified"}
- {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDoesNotCacheUnexpectedColdNotModified","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyDoesNotCacheUnexpectedColdNotModified\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDoesNotCacheUnexpectedColdNotModified","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyDoesNotCacheUnexpectedColdNotModified (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDoesNotCacheUnexpectedColdNotModified","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyPreservesBaseURLQuery"}
- {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyPreservesBaseURLQuery","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyPreservesBaseURLQuery\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyPreservesBaseURLQuery","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyPreservesBaseURLQuery (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyPreservesBaseURLQuery","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyRejectsBaseURLFragment"}
- {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyRejectsBaseURLFragment","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyRejectsBaseURLFragment\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyRejectsBaseURLFragment","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyRejectsBaseURLFragment (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyRejectsBaseURLFragment","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuth401MarksAccountUnschedulable"}
- {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuth401MarksAccountUnschedulable","Output":"=== RUN TestFetchCodexModelsManifestOAuth401MarksAccountUnschedulable\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2067158+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuth401MarksAccountUnschedulable","Output":"--- PASS: TestFetchCodexModelsManifestOAuth401MarksAccountUnschedulable (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2067158+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuth401MarksAccountUnschedulable","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2067158+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuth401TokenRevokedDisablesAccount"}
- {"Time":"2026-09-12T11:38:29.2067158+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuth401TokenRevokedDisablesAccount","Output":"=== RUN TestFetchCodexModelsManifestOAuth401TokenRevokedDisablesAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2072285+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuth401TokenRevokedDisablesAccount","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:29.207Z\",\"logger\":\"slog\",\"msg\":\"account_disabled_auth_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"error\":\"Token revoked (401): token has been revoked\"}\n"}
- {"Time":"2026-09-12T11:38:29.2072285+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuth401TokenRevokedDisablesAccount","Output":"--- PASS: TestFetchCodexModelsManifestOAuth401TokenRevokedDisablesAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2072285+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuth401TokenRevokedDisablesAccount","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2072285+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentity401DoesNotDisableAccount"}
- {"Time":"2026-09-12T11:38:29.2072285+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentity401DoesNotDisableAccount","Output":"=== RUN TestFetchCodexModelsManifestAgentIdentity401DoesNotDisableAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2077394+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentity401DoesNotDisableAccount","Output":"--- PASS: TestFetchCodexModelsManifestAgentIdentity401DoesNotDisableAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2077394+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentity401DoesNotDisableAccount","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2077394+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKey401KeepsNoFailoverAndNoDisable"}
- {"Time":"2026-09-12T11:38:29.2077394+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKey401KeepsNoFailoverAndNoDisable","Output":"=== RUN TestFetchCodexModelsManifestAPIKey401KeepsNoFailoverAndNoDisable\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2077394+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKey401KeepsNoFailoverAndNoDisable","Output":"--- PASS: TestFetchCodexModelsManifestAPIKey401KeepsNoFailoverAndNoDisable (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2077394+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKey401KeepsNoFailoverAndNoDisable","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2077394+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUpstreamError"}
- {"Time":"2026-09-12T11:38:29.2077394+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUpstreamError","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyUpstreamError\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2077394+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUpstreamError","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyUpstreamError (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2077394+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUpstreamError","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2077394+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint"}
- {"Time":"2026-09-12T11:38:29.2077394+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2077394+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/missing_base_URL"}
- {"Time":"2026-09-12T11:38:29.2077394+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/missing_base_URL","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/missing_base_URL\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2082493+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/missing_base_URL","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/missing_base_URL (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2082493+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/missing_base_URL","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2082493+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/official_host"}
- {"Time":"2026-09-12T11:38:29.2082493+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/official_host","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/official_host\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.208759+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/official_host","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/official_host (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.208759+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/official_host","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.208759+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/official_versioned_URL"}
- {"Time":"2026-09-12T11:38:29.208759+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/official_versioned_URL","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/official_versioned_URL\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2097738+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/official_versioned_URL","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/official_versioned_URL (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2097738+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/official_versioned_URL","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2097738+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2097738+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2097738+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthFreshWindowZeroUpstreamRequests"}
- {"Time":"2026-09-12T11:38:29.2097738+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthFreshWindowZeroUpstreamRequests","Output":"=== RUN TestFetchCodexModelsManifestOAuthFreshWindowZeroUpstreamRequests\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2102833+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthFreshWindowZeroUpstreamRequests","Output":"--- PASS: TestFetchCodexModelsManifestOAuthFreshWindowZeroUpstreamRequests (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2102833+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthFreshWindowZeroUpstreamRequests","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2102833+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthStaleServesOldValueAndRefreshesInBackground"}
- {"Time":"2026-09-12T11:38:29.2102833+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthStaleServesOldValueAndRefreshesInBackground","Output":"=== RUN TestFetchCodexModelsManifestOAuthStaleServesOldValueAndRefreshesInBackground\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2114283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthStaleServesOldValueAndRefreshesInBackground","Output":"--- PASS: TestFetchCodexModelsManifestOAuthStaleServesOldValueAndRefreshesInBackground (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2114283+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthStaleServesOldValueAndRefreshesInBackground","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2114283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure"}
- {"Time":"2026-09-12T11:38:29.2114283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure","Output":"=== RUN TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2114283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure/overdue_refresh_waits_and_re-caches"}
- {"Time":"2026-09-12T11:38:29.2114283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure/overdue_refresh_waits_and_re-caches","Output":"=== RUN TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure/overdue_refresh_waits_and_re-caches\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2119393+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure/overdue_refresh_waits_and_re-caches","Output":"--- PASS: TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure/overdue_refresh_waits_and_re-caches (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2119393+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure/overdue_refresh_waits_and_re-caches","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2119393+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure/overdue_upstream_failure_returns_error_not_stale_cache"}
- {"Time":"2026-09-12T11:38:29.2119393+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure/overdue_upstream_failure_returns_error_not_stale_cache","Output":"=== RUN TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure/overdue_upstream_failure_returns_error_not_stale_cache\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2124524+08:00","Action":"start","Package":"github.com/Wei-Shaw/sub2api/internal/repository"}
- {"Time":"2026-09-12T11:38:29.2124524+08:00","Action":"start","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint"}
- {"Time":"2026-09-12T11:38:29.2124524+08:00","Action":"start","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin"}
- {"Time":"2026-09-12T11:38:29.2129659+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure/overdue_upstream_failure_returns_error_not_stale_cache","Output":"--- PASS: TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure/overdue_upstream_failure_returns_error_not_stale_cache (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2129659+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure/overdue_upstream_failure_returns_error_not_stale_cache","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2129659+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure","Output":"--- PASS: TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2129659+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2129659+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthTokenChangeCacheMiss"}
- {"Time":"2026-09-12T11:38:29.2129659+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthTokenChangeCacheMiss","Output":"=== RUN TestFetchCodexModelsManifestOAuthTokenChangeCacheMiss\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2134771+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthTokenChangeCacheMiss","Output":"--- PASS: TestFetchCodexModelsManifestOAuthTokenChangeCacheMiss (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2134771+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthTokenChangeCacheMiss","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2134771+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthSharedAcrossGroupsWithIndependentFiltering"}
- {"Time":"2026-09-12T11:38:29.2134771+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthSharedAcrossGroupsWithIndependentFiltering","Output":"=== RUN TestFetchCodexModelsManifestOAuthSharedAcrossGroupsWithIndependentFiltering\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2139921+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthSharedAcrossGroupsWithIndependentFiltering","Output":"--- PASS: TestFetchCodexModelsManifestOAuthSharedAcrossGroupsWithIndependentFiltering (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2139921+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthSharedAcrossGroupsWithIndependentFiltering","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2139921+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ValidateCodexPersonalAccessToken"}
- {"Time":"2026-09-12T11:38:29.2139921+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ValidateCodexPersonalAccessToken","Output":"=== RUN TestOpenAIOAuthService_ValidateCodexPersonalAccessToken\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2139921+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ValidateCodexPersonalAccessToken","Output":"--- PASS: TestOpenAIOAuthService_ValidateCodexPersonalAccessToken (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2139921+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ValidateCodexPersonalAccessToken","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2139921+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ValidateCodexPersonalAccessTokenRequiresATPrefix"}
- {"Time":"2026-09-12T11:38:29.2139921+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ValidateCodexPersonalAccessTokenRequiresATPrefix","Output":"=== RUN TestOpenAIOAuthService_ValidateCodexPersonalAccessTokenRequiresATPrefix\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2139921+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ValidateCodexPersonalAccessTokenRequiresATPrefix","Output":"--- PASS: TestOpenAIOAuthService_ValidateCodexPersonalAccessTokenRequiresATPrefix (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2139921+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ValidateCodexPersonalAccessTokenRequiresATPrefix","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2139921+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_BuildAccountCredentialsForPAT"}
- {"Time":"2026-09-12T11:38:29.2139921+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_BuildAccountCredentialsForPAT","Output":"=== RUN TestOpenAIOAuthService_BuildAccountCredentialsForPAT\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_BuildAccountCredentialsForPAT","Output":"--- PASS: TestOpenAIOAuthService_BuildAccountCredentialsForPAT (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_BuildAccountCredentialsForPAT","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPersonalAccessTokenCredentialsRemovesOAuthFields"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPersonalAccessTokenCredentialsRemovesOAuthFields","Output":"=== RUN TestNormalizeOpenAIPersonalAccessTokenCredentialsRemovesOAuthFields\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPersonalAccessTokenCredentialsRemovesOAuthFields","Output":"--- PASS: TestNormalizeOpenAIPersonalAccessTokenCredentialsRemovesOAuthFields (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPersonalAccessTokenCredentialsRemovesOAuthFields","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAliasOpenAIOAuthReservedToolNames_RewritesDeclarationsAndReferences"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAliasOpenAIOAuthReservedToolNames_RewritesDeclarationsAndReferences","Output":"=== RUN TestAliasOpenAIOAuthReservedToolNames_RewritesDeclarationsAndReferences\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAliasOpenAIOAuthReservedToolNames_RewritesDeclarationsAndReferences","Output":"--- PASS: TestAliasOpenAIOAuthReservedToolNames_RewritesDeclarationsAndReferences (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAliasOpenAIOAuthReservedToolNames_RewritesDeclarationsAndReferences","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAliasOpenAIOAuthReservedToolNames_CollisionDoesNotMutate"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAliasOpenAIOAuthReservedToolNames_CollisionDoesNotMutate","Output":"=== RUN TestAliasOpenAIOAuthReservedToolNames_CollisionDoesNotMutate\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAliasOpenAIOAuthReservedToolNames_CollisionDoesNotMutate","Output":"--- PASS: TestAliasOpenAIOAuthReservedToolNames_CollisionDoesNotMutate (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAliasOpenAIOAuthReservedToolNames_CollisionDoesNotMutate","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ReservedPythonNameIsOAuthOnly"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ReservedPythonNameIsOAuthOnly","Output":"=== RUN TestApplyCodexOAuthTransform_ReservedPythonNameIsOAuthOnly\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ReservedPythonNameIsOAuthOnly","Output":"--- PASS: TestApplyCodexOAuthTransform_ReservedPythonNameIsOAuthOnly (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ReservedPythonNameIsOAuthOnly","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesFromContext_HTTPAndWSPayloadShapes"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesFromContext_HTTPAndWSPayloadShapes","Output":"=== RUN TestRestoreCodexToolNamesFromContext_HTTPAndWSPayloadShapes\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesFromContext_HTTPAndWSPayloadShapes","Output":"--- PASS: TestRestoreCodexToolNamesFromContext_HTTPAndWSPayloadShapes (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesFromContext_HTTPAndWSPayloadShapes","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAliasOpenAIOAuthReservedToolNames_SessionUpdateOnlyTouchesFunctionProtocolNodes"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAliasOpenAIOAuthReservedToolNames_SessionUpdateOnlyTouchesFunctionProtocolNodes","Output":"=== RUN TestAliasOpenAIOAuthReservedToolNames_SessionUpdateOnlyTouchesFunctionProtocolNodes\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAliasOpenAIOAuthReservedToolNames_SessionUpdateOnlyTouchesFunctionProtocolNodes","Output":"--- PASS: TestAliasOpenAIOAuthReservedToolNames_SessionUpdateOnlyTouchesFunctionProtocolNodes (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAliasOpenAIOAuthReservedToolNames_SessionUpdateOnlyTouchesFunctionProtocolNodes","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_OnlyTouchesResponseToolCallNodesAndPreservesNumbers"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_OnlyTouchesResponseToolCallNodesAndPreservesNumbers","Output":"=== RUN TestRestoreCodexToolNamesInJSON_OnlyTouchesResponseToolCallNodesAndPreservesNumbers\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_OnlyTouchesResponseToolCallNodesAndPreservesNumbers","Output":"--- PASS: TestRestoreCodexToolNamesInJSON_OnlyTouchesResponseToolCallNodesAndPreservesNumbers (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_OnlyTouchesResponseToolCallNodesAndPreservesNumbers","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols","Output":"=== RUN TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/chat_http"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/chat_http","Output":"=== RUN TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/chat_http\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/chat_http","Output":"--- PASS: TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/chat_http (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/chat_http","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/chat_sse"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/chat_sse","Output":"=== RUN TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/chat_sse\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/chat_sse","Output":"--- PASS: TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/chat_sse (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/chat_sse","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/messages_tool_use"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/messages_tool_use","Output":"=== RUN TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/messages_tool_use\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/messages_tool_use","Output":"--- PASS: TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/messages_tool_use (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/messages_tool_use","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols","Output":"--- PASS: TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAliasOpenAIOAuthReservedToolNames_PromptCompatibilityRunsFirst"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAliasOpenAIOAuthReservedToolNames_PromptCompatibilityRunsFirst","Output":"=== RUN TestAliasOpenAIOAuthReservedToolNames_PromptCompatibilityRunsFirst\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAliasOpenAIOAuthReservedToolNames_PromptCompatibilityRunsFirst","Output":"--- PASS: TestAliasOpenAIOAuthReservedToolNames_PromptCompatibilityRunsFirst (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAliasOpenAIOAuthReservedToolNames_PromptCompatibilityRunsFirst","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexToolNameReverse_WSSessionReplacementDoesNotChangeActiveTurn"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexToolNameReverse_WSSessionReplacementDoesNotChangeActiveTurn","Output":"=== RUN TestCodexToolNameReverse_WSSessionReplacementDoesNotChangeActiveTurn\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexToolNameReverse_WSSessionReplacementDoesNotChangeActiveTurn","Output":"--- PASS: TestCodexToolNameReverse_WSSessionReplacementDoesNotChangeActiveTurn (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexToolNameReverse_WSSessionReplacementDoesNotChangeActiveTurn","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDecodeOpenAIJSONUseNumberRejectsTrailingDocument"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDecodeOpenAIJSONUseNumberRejectsTrailingDocument","Output":"=== RUN TestDecodeOpenAIJSONUseNumberRejectsTrailingDocument\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDecodeOpenAIJSONUseNumberRejectsTrailingDocument","Output":"--- PASS: TestDecodeOpenAIJSONUseNumberRejectsTrailingDocument (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDecodeOpenAIJSONUseNumberRejectsTrailingDocument","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesFromSSEContextUsesEventLineTypeWithoutAddingType"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesFromSSEContextUsesEventLineTypeWithoutAddingType","Output":"=== RUN TestRestoreCodexToolNamesFromSSEContextUsesEventLineTypeWithoutAddingType\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesFromSSEContextUsesEventLineTypeWithoutAddingType","Output":"--- PASS: TestRestoreCodexToolNamesFromSSEContextUsesEventLineTypeWithoutAddingType (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesFromSSEContextUsesEventLineTypeWithoutAddingType","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexReasoningInclude"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexReasoningInclude","Output":"=== RUN TestEnsureCodexReasoningInclude\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexReasoningInclude","Output":"--- PASS: TestEnsureCodexReasoningInclude (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexReasoningInclude","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexClientMetadata"}
- {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexClientMetadata","Output":"=== RUN TestApplyCodexClientMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexClientMetadata","Output":"--- PASS: TestApplyCodexClientMetadata (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexClientMetadata","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultCodexSynthInstructionsModelAware"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultCodexSynthInstructionsModelAware","Output":"=== RUN TestDefaultCodexSynthInstructionsModelAware\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultCodexSynthInstructionsModelAware","Output":"--- PASS: TestDefaultCodexSynthInstructionsModelAware (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultCodexSynthInstructionsModelAware","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationPreservesInput"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationPreservesInput","Output":"=== RUN TestApplyCodexOAuthTransform_ToolContinuationPreservesInput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationPreservesInput","Output":"--- PASS: TestApplyCodexOAuthTransform_ToolContinuationPreservesInput (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationPreservesInput","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_MessagesBridgePromptCacheKeyIsHeaderOnly"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_MessagesBridgePromptCacheKeyIsHeaderOnly","Output":"=== RUN TestApplyCodexOAuthTransform_MessagesBridgePromptCacheKeyIsHeaderOnly\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_MessagesBridgePromptCacheKeyIsHeaderOnly","Output":"--- PASS: TestApplyCodexOAuthTransform_MessagesBridgePromptCacheKeyIsHeaderOnly (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_MessagesBridgePromptCacheKeyIsHeaderOnly","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationPreservesNativeMessageAndReasoningIDs"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationPreservesNativeMessageAndReasoningIDs","Output":"=== RUN TestApplyCodexOAuthTransform_ToolContinuationPreservesNativeMessageAndReasoningIDs\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationPreservesNativeMessageAndReasoningIDs","Output":"--- PASS: TestApplyCodexOAuthTransform_ToolContinuationPreservesNativeMessageAndReasoningIDs (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationPreservesNativeMessageAndReasoningIDs","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationNormalizesToolReferenceIDsOnly"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationNormalizesToolReferenceIDsOnly","Output":"=== RUN TestApplyCodexOAuthTransform_ToolContinuationNormalizesToolReferenceIDsOnly\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationNormalizesToolReferenceIDsOnly","Output":"--- PASS: TestApplyCodexOAuthTransform_ToolContinuationNormalizesToolReferenceIDsOnly (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationNormalizesToolReferenceIDsOnly","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesIsolatedLegacyReferenceAcrossTurns"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesIsolatedLegacyReferenceAcrossTurns","Output":"=== RUN TestApplyCodexOAuthTransform_NormalizesIsolatedLegacyReferenceAcrossTurns\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesIsolatedLegacyReferenceAcrossTurns","Output":"--- PASS: TestApplyCodexOAuthTransform_NormalizesIsolatedLegacyReferenceAcrossTurns (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesIsolatedLegacyReferenceAcrossTurns","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing","Output":"=== RUN TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/non-native_boundary_id"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/non-native_boundary_id","Output":"=== RUN TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/non-native_boundary_id\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/non-native_boundary_id","Output":"--- PASS: TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/non-native_boundary_id (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/non-native_boundary_id","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/overlong_fc_id"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/overlong_fc_id","Output":"=== RUN TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/overlong_fc_id\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/overlong_fc_id","Output":"--- PASS: TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/overlong_fc_id (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/overlong_fc_id","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/equivalent_prefixes"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/equivalent_prefixes","Output":"=== RUN TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/equivalent_prefixes\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/equivalent_prefixes","Output":"--- PASS: TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/equivalent_prefixes (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/equivalent_prefixes","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing","Output":"--- PASS: TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested","Output":"=== RUN TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested/anthropic_toolu_id"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested/anthropic_toolu_id","Output":"=== RUN TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested/anthropic_toolu_id\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested/anthropic_toolu_id","Output":"--- PASS: TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested/anthropic_toolu_id (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested/anthropic_toolu_id","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested/boundary_64_chars"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested/boundary_64_chars","Output":"=== RUN TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested/boundary_64_chars\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested/boundary_64_chars","Output":"--- PASS: TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested/boundary_64_chars (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested/boundary_64_chars","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested","Output":"--- PASS: TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CompactsOverlongCallIDsWhenPreserveRequested"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CompactsOverlongCallIDsWhenPreserveRequested","Output":"=== RUN TestApplyCodexOAuthTransform_CompactsOverlongCallIDsWhenPreserveRequested\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CompactsOverlongCallIDsWhenPreserveRequested","Output":"--- PASS: TestApplyCodexOAuthTransform_CompactsOverlongCallIDsWhenPreserveRequested (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CompactsOverlongCallIDsWhenPreserveRequested","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolSearchOutputPreservesCallID"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolSearchOutputPreservesCallID","Output":"=== RUN TestApplyCodexOAuthTransform_ToolSearchOutputPreservesCallID\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolSearchOutputPreservesCallID","Output":"--- PASS: TestApplyCodexOAuthTransform_ToolSearchOutputPreservesCallID (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolSearchOutputPreservesCallID","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CustomAndMCPToolOutputsPreserveCallID"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CustomAndMCPToolOutputsPreserveCallID","Output":"=== RUN TestApplyCodexOAuthTransform_CustomAndMCPToolOutputsPreserveCallID\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CustomAndMCPToolOutputsPreserveCallID","Output":"--- PASS: TestApplyCodexOAuthTransform_CustomAndMCPToolOutputsPreserveCallID (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CustomAndMCPToolOutputsPreserveCallID","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesNativeToolCallPairsByType"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesNativeToolCallPairsByType","Output":"=== RUN TestApplyCodexOAuthTransform_NormalizesNativeToolCallPairsByType\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesNativeToolCallPairsByType","Output":"--- PASS: TestApplyCodexOAuthTransform_NormalizesNativeToolCallPairsByType (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesNativeToolCallPairsByType","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesNativeCallIDsWhenRequested"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesNativeCallIDsWhenRequested","Output":"=== RUN TestApplyCodexOAuthTransform_PreservesNativeCallIDsWhenRequested\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesNativeCallIDsWhenRequested","Output":"--- PASS: TestApplyCodexOAuthTransform_PreservesNativeCallIDsWhenRequested (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesNativeCallIDsWhenRequested","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsEquivalentNativeToolCallIDsWithPairing"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsEquivalentNativeToolCallIDsWithPairing","Output":"=== RUN TestApplyCodexOAuthTransform_BoundsEquivalentNativeToolCallIDsWithPairing\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsEquivalentNativeToolCallIDsWithPairing","Output":"--- PASS: TestApplyCodexOAuthTransform_BoundsEquivalentNativeToolCallIDsWithPairing (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsEquivalentNativeToolCallIDsWithPairing","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ImageAndWebSearchCallsDoNotGainCallID"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ImageAndWebSearchCallsDoNotGainCallID","Output":"=== RUN TestApplyCodexOAuthTransform_ImageAndWebSearchCallsDoNotGainCallID\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ImageAndWebSearchCallsDoNotGainCallID","Output":"--- PASS: TestApplyCodexOAuthTransform_ImageAndWebSearchCallsDoNotGainCallID (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ImageAndWebSearchCallsDoNotGainCallID","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ConvertsToolRoleMessageToFunctionCallOutput"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ConvertsToolRoleMessageToFunctionCallOutput","Output":"=== RUN TestApplyCodexOAuthTransform_ConvertsToolRoleMessageToFunctionCallOutput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ConvertsToolRoleMessageToFunctionCallOutput","Output":"--- PASS: TestApplyCodexOAuthTransform_ConvertsToolRoleMessageToFunctionCallOutput (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ConvertsToolRoleMessageToFunctionCallOutput","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringifiesNonStringMessageContentText"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringifiesNonStringMessageContentText","Output":"=== RUN TestApplyCodexOAuthTransform_StringifiesNonStringMessageContentText\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringifiesNonStringMessageContentText","Output":"--- PASS: TestApplyCodexOAuthTransform_StringifiesNonStringMessageContentText (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringifiesNonStringMessageContentText","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools","Output":"=== RUN TestApplyCodexOAuthTransform_PreservesAllowedTools\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/top_level/auto"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/top_level/auto","Output":"=== RUN TestApplyCodexOAuthTransform_PreservesAllowedTools/top_level/auto\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/top_level/auto","Output":"--- PASS: TestApplyCodexOAuthTransform_PreservesAllowedTools/top_level/auto (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/top_level/auto","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/top_level/required"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/top_level/required","Output":"=== RUN TestApplyCodexOAuthTransform_PreservesAllowedTools/top_level/required\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/top_level/required","Output":"--- PASS: TestApplyCodexOAuthTransform_PreservesAllowedTools/top_level/required (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/top_level/required","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/additional_tools/auto"}
- {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/additional_tools/auto","Output":"=== RUN TestApplyCodexOAuthTransform_PreservesAllowedTools/additional_tools/auto\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/additional_tools/auto","Output":"--- PASS: TestApplyCodexOAuthTransform_PreservesAllowedTools/additional_tools/auto (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/additional_tools/auto","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/additional_tools/required"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/additional_tools/required","Output":"=== RUN TestApplyCodexOAuthTransform_PreservesAllowedTools/additional_tools/required\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/additional_tools/required","Output":"--- PASS: TestApplyCodexOAuthTransform_PreservesAllowedTools/additional_tools/required (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/additional_tools/required","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools","Output":"--- PASS: TestApplyCodexOAuthTransform_PreservesAllowedTools (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexToolChoice_InvalidAllowedToolsNeverBecomesAuto"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexToolChoice_InvalidAllowedToolsNeverBecomesAuto","Output":"=== RUN TestNormalizeCodexToolChoice_InvalidAllowedToolsNeverBecomesAuto\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexToolChoice_InvalidAllowedToolsNeverBecomesAuto","Output":"--- PASS: TestNormalizeCodexToolChoice_InvalidAllowedToolsNeverBecomesAuto (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexToolChoice_InvalidAllowedToolsNeverBecomesAuto","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AllowedToolsKeepsReservedNameReferences"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AllowedToolsKeepsReservedNameReferences","Output":"=== RUN TestApplyCodexOAuthTransform_AllowedToolsKeepsReservedNameReferences\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AllowedToolsKeepsReservedNameReferences","Output":"--- PASS: TestApplyCodexOAuthTransform_AllowedToolsKeepsReservedNameReferences (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AllowedToolsKeepsReservedNameReferences","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DowngradesUnknownToolChoice"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DowngradesUnknownToolChoice","Output":"=== RUN TestApplyCodexOAuthTransform_DowngradesUnknownToolChoice\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DowngradesUnknownToolChoice","Output":"--- PASS: TestApplyCodexOAuthTransform_DowngradesUnknownToolChoice (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DowngradesUnknownToolChoice","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesKnownToolChoice"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesKnownToolChoice","Output":"=== RUN TestApplyCodexOAuthTransform_PreservesKnownToolChoice\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesKnownToolChoice","Output":"--- PASS: TestApplyCodexOAuthTransform_PreservesKnownToolChoice (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesKnownToolChoice","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesLegacyFunctionToolChoice"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesLegacyFunctionToolChoice","Output":"=== RUN TestApplyCodexOAuthTransform_NormalizesLegacyFunctionToolChoice\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesLegacyFunctionToolChoice","Output":"--- PASS: TestApplyCodexOAuthTransform_NormalizesLegacyFunctionToolChoice (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesLegacyFunctionToolChoice","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DowngradesMissingFunctionToolChoice"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DowngradesMissingFunctionToolChoice","Output":"=== RUN TestApplyCodexOAuthTransform_DowngradesMissingFunctionToolChoice\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DowngradesMissingFunctionToolChoice","Output":"--- PASS: TestApplyCodexOAuthTransform_DowngradesMissingFunctionToolChoice (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DowngradesMissingFunctionToolChoice","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AddsFallbackNameForFunctionCallInput"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AddsFallbackNameForFunctionCallInput","Output":"=== RUN TestApplyCodexOAuthTransform_AddsFallbackNameForFunctionCallInput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AddsFallbackNameForFunctionCallInput","Output":"--- PASS: TestApplyCodexOAuthTransform_AddsFallbackNameForFunctionCallInput (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AddsFallbackNameForFunctionCallInput","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesFunctionCallInputName"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesFunctionCallInputName","Output":"=== RUN TestApplyCodexOAuthTransform_PreservesFunctionCallInputName\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesFunctionCallInputName","Output":"--- PASS: TestApplyCodexOAuthTransform_PreservesFunctionCallInputName (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesFunctionCallInputName","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesMCPToolCallIDAndName"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesMCPToolCallIDAndName","Output":"=== RUN TestApplyCodexOAuthTransform_PreservesMCPToolCallIDAndName\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesMCPToolCallIDAndName","Output":"--- PASS: TestApplyCodexOAuthTransform_PreservesMCPToolCallIDAndName (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesMCPToolCallIDAndName","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexInputItemRequiresNameTypesAllowCallID"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexInputItemRequiresNameTypesAllowCallID","Output":"=== RUN TestCodexInputItemRequiresNameTypesAllowCallID\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexInputItemRequiresNameTypesAllowCallID","Output":"--- PASS: TestCodexInputItemRequiresNameTypesAllowCallID (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexInputItemRequiresNameTypesAllowCallID","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExplicitStoreFalsePreserved"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExplicitStoreFalsePreserved","Output":"=== RUN TestApplyCodexOAuthTransform_ExplicitStoreFalsePreserved\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExplicitStoreFalsePreserved","Output":"--- PASS: TestApplyCodexOAuthTransform_ExplicitStoreFalsePreserved (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExplicitStoreFalsePreserved","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExplicitStoreTrueForcedFalse"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExplicitStoreTrueForcedFalse","Output":"=== RUN TestApplyCodexOAuthTransform_ExplicitStoreTrueForcedFalse\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExplicitStoreTrueForcedFalse","Output":"--- PASS: TestApplyCodexOAuthTransform_ExplicitStoreTrueForcedFalse (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExplicitStoreTrueForcedFalse","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CompactForcesNonStreaming"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CompactForcesNonStreaming","Output":"=== RUN TestApplyCodexOAuthTransform_CompactForcesNonStreaming\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CompactForcesNonStreaming","Output":"--- PASS: TestApplyCodexOAuthTransform_CompactForcesNonStreaming (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CompactForcesNonStreaming","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NonContinuationDefaultsStoreFalseAndStripsIDs"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NonContinuationDefaultsStoreFalseAndStripsIDs","Output":"=== RUN TestApplyCodexOAuthTransform_NonContinuationDefaultsStoreFalseAndStripsIDs\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NonContinuationDefaultsStoreFalseAndStripsIDs","Output":"--- PASS: TestApplyCodexOAuthTransform_NonContinuationDefaultsStoreFalseAndStripsIDs (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NonContinuationDefaultsStoreFalseAndStripsIDs","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_RemovesItemReferenceWhenNotPreserved"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_RemovesItemReferenceWhenNotPreserved","Output":"=== RUN TestFilterCodexInput_RemovesItemReferenceWhenNotPreserved\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_RemovesItemReferenceWhenNotPreserved","Output":"--- PASS: TestFilterCodexInput_RemovesItemReferenceWhenNotPreserved (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_RemovesItemReferenceWhenNotPreserved","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizeCodexTools_PreservesResponsesFunctionTools"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizeCodexTools_PreservesResponsesFunctionTools","Output":"=== RUN TestApplyCodexOAuthTransform_NormalizeCodexTools_PreservesResponsesFunctionTools\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizeCodexTools_PreservesResponsesFunctionTools","Output":"--- PASS: TestApplyCodexOAuthTransform_NormalizeCodexTools_PreservesResponsesFunctionTools (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizeCodexTools_PreservesResponsesFunctionTools","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesImageGenerationTools_RewritesLegacyFields"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesImageGenerationTools_RewritesLegacyFields","Output":"=== RUN TestNormalizeOpenAIResponsesImageGenerationTools_RewritesLegacyFields\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesImageGenerationTools_RewritesLegacyFields","Output":"--- PASS: TestNormalizeOpenAIResponsesImageGenerationTools_RewritesLegacyFields (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesImageGenerationTools_RewritesLegacyFields","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_NoTools"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_NoTools","Output":"=== RUN TestEnsureOpenAIResponsesImageGenerationTool_NoTools\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_NoTools","Output":"--- PASS: TestEnsureOpenAIResponsesImageGenerationTool_NoTools (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_NoTools","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_SkipsSpark"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_SkipsSpark","Output":"=== RUN TestEnsureOpenAIResponsesImageGenerationTool_SkipsSpark\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_SkipsSpark","Output":"--- PASS: TestEnsureOpenAIResponsesImageGenerationTool_SkipsSpark (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_SkipsSpark","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_AppendsToExistingTools"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_AppendsToExistingTools","Output":"=== RUN TestEnsureOpenAIResponsesImageGenerationTool_AppendsToExistingTools\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_AppendsToExistingTools","Output":"--- PASS: TestEnsureOpenAIResponsesImageGenerationTool_AppendsToExistingTools (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_AppendsToExistingTools","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_PreservesExistingImageTool"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_PreservesExistingImageTool","Output":"=== RUN TestEnsureOpenAIResponsesImageGenerationTool_PreservesExistingImageTool\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_PreservesExistingImageTool","Output":"--- PASS: TestEnsureOpenAIResponsesImageGenerationTool_PreservesExistingImageTool (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_PreservesExistingImageTool","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_PreservesImageGenNamespace"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_PreservesImageGenNamespace","Output":"=== RUN TestEnsureOpenAIResponsesImageGenerationTool_PreservesImageGenNamespace\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_PreservesImageGenNamespace/top-level_tools"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_PreservesImageGenNamespace/top-level_tools","Output":"=== RUN TestEnsureOpenAIResponsesImageGenerationTool_PreservesImageGenNamespace/top-level_tools\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_PreservesImageGenNamespace/top-level_tools","Output":"--- PASS: TestEnsureOpenAIResponsesImageGenerationTool_PreservesImageGenNamespace/top-level_tools (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_PreservesImageGenNamespace/top-level_tools","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_PreservesImageGenNamespace/responses_lite_additional_tools"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_PreservesImageGenNamespace/responses_lite_additional_tools","Output":"=== RUN TestEnsureOpenAIResponsesImageGenerationTool_PreservesImageGenNamespace/responses_lite_additional_tools\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_PreservesImageGenNamespace/responses_lite_additional_tools","Output":"--- PASS: TestEnsureOpenAIResponsesImageGenerationTool_PreservesImageGenNamespace/responses_lite_additional_tools (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_PreservesImageGenNamespace/responses_lite_additional_tools","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_PreservesImageGenNamespace","Output":"--- PASS: TestEnsureOpenAIResponsesImageGenerationTool_PreservesImageGenNamespace (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_PreservesImageGenNamespace","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools","Output":"=== RUN TestCodexImageGenerationBridge_PreservesClientImageFunctionTools\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/flat_image_gen_function"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/flat_image_gen_function","Output":"=== RUN TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/flat_image_gen_function\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/flat_image_gen_function","Output":"--- PASS: TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/flat_image_gen_function (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/flat_image_gen_function","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/nested_image_gen_function"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/nested_image_gen_function","Output":"=== RUN TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/nested_image_gen_function\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/nested_image_gen_function","Output":"--- PASS: TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/nested_image_gen_function (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/nested_image_gen_function","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/similar_function_name_still_receives_hosted_bridge"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/similar_function_name_still_receives_hosted_bridge","Output":"=== RUN TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/similar_function_name_still_receives_hosted_bridge\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/similar_function_name_still_receives_hosted_bridge","Output":"--- PASS: TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/similar_function_name_still_receives_hosted_bridge (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/similar_function_name_still_receives_hosted_bridge","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools","Output":"--- PASS: TestCodexImageGenerationBridge_PreservesClientImageFunctionTools (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_AppendsBridgeOnce"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_AppendsBridgeOnce","Output":"=== RUN TestApplyCodexImageGenerationBridgeInstructions_AppendsBridgeOnce\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_AppendsBridgeOnce","Output":"--- PASS: TestApplyCodexImageGenerationBridgeInstructions_AppendsBridgeOnce (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_AppendsBridgeOnce","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_SkipsSpark"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_SkipsSpark","Output":"=== RUN TestApplyCodexImageGenerationBridgeInstructions_SkipsSpark\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_SkipsSpark","Output":"--- PASS: TestApplyCodexImageGenerationBridgeInstructions_SkipsSpark (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_SkipsSpark","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_SkipsWithoutImageTool"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_SkipsWithoutImageTool","Output":"=== RUN TestApplyCodexImageGenerationBridgeInstructions_SkipsWithoutImageTool\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_SkipsWithoutImageTool","Output":"--- PASS: TestApplyCodexImageGenerationBridgeInstructions_SkipsWithoutImageTool (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_SkipsWithoutImageTool","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputRejectsInputImage"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputRejectsInputImage","Output":"=== RUN TestValidateCodexSparkInputRejectsInputImage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputRejectsInputImage","Output":"--- PASS: TestValidateCodexSparkInputRejectsInputImage (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputRejectsInputImage","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputRejectsChatImageURL"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputRejectsChatImageURL","Output":"=== RUN TestValidateCodexSparkInputRejectsChatImageURL\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputRejectsChatImageURL","Output":"--- PASS: TestValidateCodexSparkInputRejectsChatImageURL (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputRejectsChatImageURL","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputAllowsTextOnly"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputAllowsTextOnly","Output":"=== RUN TestValidateCodexSparkInputAllowsTextOnly\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputAllowsTextOnly","Output":"--- PASS: TestValidateCodexSparkInputAllowsTextOnly (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputAllowsTextOnly","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AddsSparkImageUnsupportedInstructions"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AddsSparkImageUnsupportedInstructions","Output":"=== RUN TestApplyCodexOAuthTransform_AddsSparkImageUnsupportedInstructions\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AddsSparkImageUnsupportedInstructions","Output":"--- PASS: TestApplyCodexOAuthTransform_AddsSparkImageUnsupportedInstructions (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AddsSparkImageUnsupportedInstructions","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DoesNotAddSparkImageUnsupportedForNonSpark"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DoesNotAddSparkImageUnsupportedForNonSpark","Output":"=== RUN TestApplyCodexOAuthTransform_DoesNotAddSparkImageUnsupportedForNonSpark\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DoesNotAddSparkImageUnsupportedForNonSpark","Output":"--- PASS: TestApplyCodexOAuthTransform_DoesNotAddSparkImageUnsupportedForNonSpark (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DoesNotAddSparkImageUnsupportedForNonSpark","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsImageGenerationToolForSpark"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsImageGenerationToolForSpark","Output":"=== RUN TestApplyCodexOAuthTransform_StripsImageGenerationToolForSpark\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsImageGenerationToolForSpark","Output":"--- PASS: TestApplyCodexOAuthTransform_StripsImageGenerationToolForSpark (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsImageGenerationToolForSpark","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsImageGenerationToolForSparkAlias"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsImageGenerationToolForSparkAlias","Output":"=== RUN TestApplyCodexOAuthTransform_StripsImageGenerationToolForSparkAlias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsImageGenerationToolForSparkAlias","Output":"--- PASS: TestApplyCodexOAuthTransform_StripsImageGenerationToolForSparkAlias (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsImageGenerationToolForSparkAlias","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationTools_StripsNamespaceFormats"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationTools_StripsNamespaceFormats","Output":"=== RUN TestStripOpenAIImageGenerationTools_StripsNamespaceFormats\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationTools_StripsNamespaceFormats","Output":"--- PASS: TestStripOpenAIImageGenerationTools_StripsNamespaceFormats (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationTools_StripsNamespaceFormats","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationTools_KeepsNonImageNamespaces"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationTools_KeepsNonImageNamespaces","Output":"=== RUN TestStripOpenAIImageGenerationTools_KeepsNonImageNamespaces\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationTools_KeepsNonImageNamespaces","Output":"--- PASS: TestStripOpenAIImageGenerationTools_KeepsNonImageNamespaces (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationTools_KeepsNonImageNamespaces","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationTools_KeepsCustomImagegenFunctionChoice"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationTools_KeepsCustomImagegenFunctionChoice","Output":"=== RUN TestStripOpenAIImageGenerationTools_KeepsCustomImagegenFunctionChoice\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationTools_KeepsCustomImagegenFunctionChoice","Output":"--- PASS: TestStripOpenAIImageGenerationTools_KeepsCustomImagegenFunctionChoice (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationTools_KeepsCustomImagegenFunctionChoice","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_KeepsImageGenerationToolForNonSpark"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_KeepsImageGenerationToolForNonSpark","Output":"=== RUN TestApplyCodexOAuthTransform_KeepsImageGenerationToolForNonSpark\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_KeepsImageGenerationToolForNonSpark","Output":"--- PASS: TestApplyCodexOAuthTransform_KeepsImageGenerationToolForNonSpark (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_KeepsImageGenerationToolForNonSpark","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesImageOnlyModel_BuildsImageToolRequest"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesImageOnlyModel_BuildsImageToolRequest","Output":"=== RUN TestNormalizeOpenAIResponsesImageOnlyModel_BuildsImageToolRequest\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesImageOnlyModel_BuildsImageToolRequest","Output":"--- PASS: TestNormalizeOpenAIResponsesImageOnlyModel_BuildsImageToolRequest (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesImageOnlyModel_BuildsImageToolRequest","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesImageOnlyModel_PreservesExistingImageTool"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesImageOnlyModel_PreservesExistingImageTool","Output":"=== RUN TestNormalizeOpenAIResponsesImageOnlyModel_PreservesExistingImageTool\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesImageOnlyModel_PreservesExistingImageTool","Output":"--- PASS: TestNormalizeOpenAIResponsesImageOnlyModel_PreservesExistingImageTool (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesImageOnlyModel_PreservesExistingImageTool","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIResponsesImageModel_RejectsImageOnlyModel"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIResponsesImageModel_RejectsImageOnlyModel","Output":"=== RUN TestValidateOpenAIResponsesImageModel_RejectsImageOnlyModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIResponsesImageModel_RejectsImageOnlyModel","Output":"--- PASS: TestValidateOpenAIResponsesImageModel_RejectsImageOnlyModel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIResponsesImageModel_RejectsImageOnlyModel","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_EmptyInput"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_EmptyInput","Output":"=== RUN TestApplyCodexOAuthTransform_EmptyInput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_EmptyInput","Output":"--- PASS: TestApplyCodexOAuthTransform_EmptyInput (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_EmptyInput","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel_Gpt53"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel_Gpt53","Output":"=== RUN TestNormalizeCodexModel_Gpt53\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel_Gpt53","Output":"--- PASS: TestNormalizeCodexModel_Gpt53 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel_Gpt53","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel_RemovedModelsFallbackToSupportedTargets"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel_RemovedModelsFallbackToSupportedTargets","Output":"=== RUN TestNormalizeCodexModel_RemovedModelsFallbackToSupportedTargets\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel_RemovedModelsFallbackToSupportedTargets","Output":"--- PASS: TestNormalizeCodexModel_RemovedModelsFallbackToSupportedTargets (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel_RemovedModelsFallbackToSupportedTargets","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesBareSparkModel"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesBareSparkModel","Output":"=== RUN TestApplyCodexOAuthTransform_PreservesBareSparkModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesBareSparkModel","Output":"--- PASS: TestApplyCodexOAuthTransform_PreservesBareSparkModel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesBareSparkModel","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_TrimmedModelWithoutPolicyRewrite"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_TrimmedModelWithoutPolicyRewrite","Output":"=== RUN TestApplyCodexOAuthTransform_TrimmedModelWithoutPolicyRewrite\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_TrimmedModelWithoutPolicyRewrite","Output":"--- PASS: TestApplyCodexOAuthTransform_TrimmedModelWithoutPolicyRewrite (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_TrimmedModelWithoutPolicyRewrite","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CodexCLI_PreservesExistingInstructions"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CodexCLI_PreservesExistingInstructions","Output":"=== RUN TestApplyCodexOAuthTransform_CodexCLI_PreservesExistingInstructions\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CodexCLI_PreservesExistingInstructions","Output":"--- PASS: TestApplyCodexOAuthTransform_CodexCLI_PreservesExistingInstructions (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CodexCLI_PreservesExistingInstructions","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CodexCLI_SuppliesDefaultWhenEmpty"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CodexCLI_SuppliesDefaultWhenEmpty","Output":"=== RUN TestApplyCodexOAuthTransform_CodexCLI_SuppliesDefaultWhenEmpty\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CodexCLI_SuppliesDefaultWhenEmpty","Output":"--- PASS: TestApplyCodexOAuthTransform_CodexCLI_SuppliesDefaultWhenEmpty (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CodexCLI_SuppliesDefaultWhenEmpty","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_GPT55SuppliesModelSpecificInstructions"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_GPT55SuppliesModelSpecificInstructions","Output":"=== RUN TestApplyCodexOAuthTransform_GPT55SuppliesModelSpecificInstructions\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_GPT55SuppliesModelSpecificInstructions","Output":"--- PASS: TestApplyCodexOAuthTransform_GPT55SuppliesModelSpecificInstructions (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_GPT55SuppliesModelSpecificInstructions","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_GPT6AstraSuppliesModelSpecificInstructions"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_GPT6AstraSuppliesModelSpecificInstructions","Output":"=== RUN TestApplyCodexOAuthTransform_GPT6AstraSuppliesModelSpecificInstructions\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_GPT6AstraSuppliesModelSpecificInstructions","Output":"--- PASS: TestApplyCodexOAuthTransform_GPT6AstraSuppliesModelSpecificInstructions (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_GPT6AstraSuppliesModelSpecificInstructions","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NonCodexCLI_PreservesExistingInstructions"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NonCodexCLI_PreservesExistingInstructions","Output":"=== RUN TestApplyCodexOAuthTransform_NonCodexCLI_PreservesExistingInstructions\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NonCodexCLI_PreservesExistingInstructions","Output":"--- PASS: TestApplyCodexOAuthTransform_NonCodexCLI_PreservesExistingInstructions (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NonCodexCLI_PreservesExistingInstructions","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringInputConvertedToArray"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringInputConvertedToArray","Output":"=== RUN TestApplyCodexOAuthTransform_StringInputConvertedToArray\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringInputConvertedToArray","Output":"--- PASS: TestApplyCodexOAuthTransform_StringInputConvertedToArray (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringInputConvertedToArray","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_EmptyStringInputBecomesEmptyArray"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_EmptyStringInputBecomesEmptyArray","Output":"=== RUN TestApplyCodexOAuthTransform_EmptyStringInputBecomesEmptyArray\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_EmptyStringInputBecomesEmptyArray","Output":"--- PASS: TestApplyCodexOAuthTransform_EmptyStringInputBecomesEmptyArray (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_EmptyStringInputBecomesEmptyArray","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_WhitespaceStringInputBecomesEmptyArray"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_WhitespaceStringInputBecomesEmptyArray","Output":"=== RUN TestApplyCodexOAuthTransform_WhitespaceStringInputBecomesEmptyArray\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_WhitespaceStringInputBecomesEmptyArray","Output":"--- PASS: TestApplyCodexOAuthTransform_WhitespaceStringInputBecomesEmptyArray (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_WhitespaceStringInputBecomesEmptyArray","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringInputWithToolsField"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringInputWithToolsField","Output":"=== RUN TestApplyCodexOAuthTransform_StringInputWithToolsField\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringInputWithToolsField","Output":"--- PASS: TestApplyCodexOAuthTransform_StringInputWithToolsField (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringInputWithToolsField","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsPromptCacheRetention"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsPromptCacheRetention","Output":"=== RUN TestApplyCodexOAuthTransform_StripsPromptCacheRetention\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsPromptCacheRetention","Output":"--- PASS: TestApplyCodexOAuthTransform_StripsPromptCacheRetention (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsPromptCacheRetention","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsChatGPTInternalUnsupportedFields"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsChatGPTInternalUnsupportedFields","Output":"=== RUN TestApplyCodexOAuthTransform_StripsChatGPTInternalUnsupportedFields\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsChatGPTInternalUnsupportedFields","Output":"--- PASS: TestApplyCodexOAuthTransform_StripsChatGPTInternalUnsupportedFields (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsChatGPTInternalUnsupportedFields","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesPromptAndCommands"}
- {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesPromptAndCommands","Output":"=== RUN TestApplyCodexOAuthTransform_NormalizesPromptAndCommands\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesPromptAndCommands","Output":"--- PASS: TestApplyCodexOAuthTransform_NormalizesPromptAndCommands (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesPromptAndCommands","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesImageGenerationTools_StripsGPTImage2InputFidelity"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesImageGenerationTools_StripsGPTImage2InputFidelity","Output":"=== RUN TestNormalizeOpenAIResponsesImageGenerationTools_StripsGPTImage2InputFidelity\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesImageGenerationTools_StripsGPTImage2InputFidelity","Output":"--- PASS: TestNormalizeOpenAIResponsesImageGenerationTools_StripsGPTImage2InputFidelity (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesImageGenerationTools_StripsGPTImage2InputFidelity","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyImageGenerationToolNeedsNormalization_GPTImage2InputFidelity"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyImageGenerationToolNeedsNormalization_GPTImage2InputFidelity","Output":"=== RUN TestOpenAIRequestBodyImageGenerationToolNeedsNormalization_GPTImage2InputFidelity\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyImageGenerationToolNeedsNormalization_GPTImage2InputFidelity","Output":"--- PASS: TestOpenAIRequestBodyImageGenerationToolNeedsNormalization_GPTImage2InputFidelity (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyImageGenerationToolNeedsNormalization_GPTImage2InputFidelity","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExtractsSystemMessages"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExtractsSystemMessages","Output":"=== RUN TestApplyCodexOAuthTransform_ExtractsSystemMessages\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExtractsSystemMessages","Output":"--- PASS: TestApplyCodexOAuthTransform_ExtractsSystemMessages (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExtractsSystemMessages","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_JsonObjectKeepsJsonInstructionInInput"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_JsonObjectKeepsJsonInstructionInInput","Output":"=== RUN TestApplyCodexOAuthTransform_JsonObjectKeepsJsonInstructionInInput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_JsonObjectKeepsJsonInstructionInInput","Output":"--- PASS: TestApplyCodexOAuthTransform_JsonObjectKeepsJsonInstructionInInput (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_JsonObjectKeepsJsonInstructionInInput","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningStripsID"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningStripsID","Output":"=== RUN TestFilterCodexInput_PreservesReasoningStripsID\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningStripsID/preserveReferences=true"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningStripsID/preserveReferences=true","Output":"=== RUN TestFilterCodexInput_PreservesReasoningStripsID/preserveReferences=true\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningStripsID/preserveReferences=true","Output":"--- PASS: TestFilterCodexInput_PreservesReasoningStripsID/preserveReferences=true (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningStripsID/preserveReferences=true","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningStripsID/preserveReferences=false"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningStripsID/preserveReferences=false","Output":"=== RUN TestFilterCodexInput_PreservesReasoningStripsID/preserveReferences=false\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningStripsID/preserveReferences=false","Output":"--- PASS: TestFilterCodexInput_PreservesReasoningStripsID/preserveReferences=false (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningStripsID/preserveReferences=false","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningStripsID","Output":"--- PASS: TestFilterCodexInput_PreservesReasoningStripsID (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningStripsID","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_BareReasoningStripsIDBackfillsSummary"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_BareReasoningStripsIDBackfillsSummary","Output":"=== RUN TestFilterCodexInput_BareReasoningStripsIDBackfillsSummary\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_BareReasoningStripsIDBackfillsSummary","Output":"--- PASS: TestFilterCodexInput_BareReasoningStripsIDBackfillsSummary (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_BareReasoningStripsIDBackfillsSummary","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_ReasoningBackfillsMissingSummary"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_ReasoningBackfillsMissingSummary","Output":"=== RUN TestFilterCodexInput_ReasoningBackfillsMissingSummary\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_ReasoningBackfillsMissingSummary","Output":"--- PASS: TestFilterCodexInput_ReasoningBackfillsMissingSummary (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_ReasoningBackfillsMissingSummary","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningSummaryAndContent"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningSummaryAndContent","Output":"=== RUN TestFilterCodexInput_PreservesReasoningSummaryAndContent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningSummaryAndContent","Output":"--- PASS: TestFilterCodexInput_PreservesReasoningSummaryAndContent (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningSummaryAndContent","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningInMixedInput"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningInMixedInput","Output":"=== RUN TestFilterCodexInput_PreservesReasoningInMixedInput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningInMixedInput/preserveReferences=true"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningInMixedInput/preserveReferences=true","Output":"=== RUN TestFilterCodexInput_PreservesReasoningInMixedInput/preserveReferences=true\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningInMixedInput/preserveReferences=true","Output":"--- PASS: TestFilterCodexInput_PreservesReasoningInMixedInput/preserveReferences=true (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningInMixedInput/preserveReferences=true","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningInMixedInput/preserveReferences=false"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningInMixedInput/preserveReferences=false","Output":"=== RUN TestFilterCodexInput_PreservesReasoningInMixedInput/preserveReferences=false\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningInMixedInput/preserveReferences=false","Output":"--- PASS: TestFilterCodexInput_PreservesReasoningInMixedInput/preserveReferences=false (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningInMixedInput/preserveReferences=false","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningInMixedInput","Output":"--- PASS: TestFilterCodexInput_PreservesReasoningInMixedInput (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningInMixedInput","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexTurnStateSeed"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexTurnStateSeed","Output":"=== RUN TestOpenAICodexTurnStateSeed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexTurnStateSeed","Output":"--- PASS: TestOpenAICodexTurnStateSeed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexTurnStateSeed","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRelayOpenAICodexTurnState_SetsHeaderAndRecordsProvenance"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRelayOpenAICodexTurnState_SetsHeaderAndRecordsProvenance","Output":"=== RUN TestRelayOpenAICodexTurnState_SetsHeaderAndRecordsProvenance\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRelayOpenAICodexTurnState_SetsHeaderAndRecordsProvenance","Output":"--- PASS: TestRelayOpenAICodexTurnState_SetsHeaderAndRecordsProvenance (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRelayOpenAICodexTurnState_SetsHeaderAndRecordsProvenance","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRelayOpenAICodexTurnState_ClearsStaleValueWhenUpstreamAbsent"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRelayOpenAICodexTurnState_ClearsStaleValueWhenUpstreamAbsent","Output":"=== RUN TestRelayOpenAICodexTurnState_ClearsStaleValueWhenUpstreamAbsent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRelayOpenAICodexTurnState_ClearsStaleValueWhenUpstreamAbsent","Output":"--- PASS: TestRelayOpenAICodexTurnState_ClearsStaleValueWhenUpstreamAbsent (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRelayOpenAICodexTurnState_ClearsStaleValueWhenUpstreamAbsent","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStageOpenAICodexTurnState_StagedHeaders"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStageOpenAICodexTurnState_StagedHeaders","Output":"=== RUN TestStageOpenAICodexTurnState_StagedHeaders\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStageOpenAICodexTurnState_StagedHeaders","Output":"--- PASS: TestStageOpenAICodexTurnState_StagedHeaders (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStageOpenAICodexTurnState_StagedHeaders","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNoteStagedOpenAICodexTurnStateCommitted_NoopWithoutState"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNoteStagedOpenAICodexTurnStateCommitted_NoopWithoutState","Output":"=== RUN TestNoteStagedOpenAICodexTurnStateCommitted_NoopWithoutState\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNoteStagedOpenAICodexTurnStateCommitted_NoopWithoutState","Output":"--- PASS: TestNoteStagedOpenAICodexTurnStateCommitted_NoopWithoutState (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNoteStagedOpenAICodexTurnStateCommitted_NoopWithoutState","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho","Output":"=== RUN TestGuardOpenAICodexTurnStateEcho\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/same_account_keeps_echo"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/same_account_keeps_echo","Output":"=== RUN TestGuardOpenAICodexTurnStateEcho/same_account_keeps_echo\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/same_account_keeps_echo","Output":"--- PASS: TestGuardOpenAICodexTurnStateEcho/same_account_keeps_echo (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/same_account_keeps_echo","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/foreign_account_strips_echo"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/foreign_account_strips_echo","Output":"=== RUN TestGuardOpenAICodexTurnStateEcho/foreign_account_strips_echo\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/foreign_account_strips_echo","Output":"--- PASS: TestGuardOpenAICodexTurnStateEcho/foreign_account_strips_echo (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/foreign_account_strips_echo","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/no_provenance_passthrough"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/no_provenance_passthrough","Output":"=== RUN TestGuardOpenAICodexTurnStateEcho/no_provenance_passthrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/no_provenance_passthrough","Output":"--- PASS: TestGuardOpenAICodexTurnStateEcho/no_provenance_passthrough (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/no_provenance_passthrough","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/expired_provenance_passthrough_and_pruned"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/expired_provenance_passthrough_and_pruned","Output":"=== RUN TestGuardOpenAICodexTurnStateEcho/expired_provenance_passthrough_and_pruned\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/expired_provenance_passthrough_and_pruned","Output":"--- PASS: TestGuardOpenAICodexTurnStateEcho/expired_provenance_passthrough_and_pruned (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/expired_provenance_passthrough_and_pruned","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/no_session_seed_noop"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/no_session_seed_noop","Output":"=== RUN TestGuardOpenAICodexTurnStateEcho/no_session_seed_noop\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/no_session_seed_noop","Output":"--- PASS: TestGuardOpenAICodexTurnStateEcho/no_session_seed_noop (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/no_session_seed_noop","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/no_echo_noop"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/no_echo_noop","Output":"=== RUN TestGuardOpenAICodexTurnStateEcho/no_echo_noop\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/no_echo_noop","Output":"--- PASS: TestGuardOpenAICodexTurnStateEcho/no_echo_noop (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/no_echo_noop","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho","Output":"--- PASS: TestGuardOpenAICodexTurnStateEcho (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSweepOpenAICodexTurnStateOrigins_PrunesExpiredEntries"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSweepOpenAICodexTurnStateOrigins_PrunesExpiredEntries","Output":"=== RUN TestSweepOpenAICodexTurnStateOrigins_PrunesExpiredEntries\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSweepOpenAICodexTurnStateOrigins_PrunesExpiredEntries","Output":"--- PASS: TestSweepOpenAICodexTurnStateOrigins_PrunesExpiredEntries (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSweepOpenAICodexTurnStateOrigins_PrunesExpiredEntries","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughResponseHeaders_RelaysAndClearsTurnState"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughResponseHeaders_RelaysAndClearsTurnState","Output":"=== RUN TestWriteOpenAIPassthroughResponseHeaders_RelaysAndClearsTurnState\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughResponseHeaders_RelaysAndClearsTurnState","Output":"--- PASS: TestWriteOpenAIPassthroughResponseHeaders_RelaysAndClearsTurnState (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughResponseHeaders_RelaysAndClearsTurnState","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughResponseHeaders_RelaysReasoningIncluded"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughResponseHeaders_RelaysReasoningIncluded","Output":"=== RUN TestWriteOpenAIPassthroughResponseHeaders_RelaysReasoningIncluded\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughResponseHeaders_RelaysReasoningIncluded","Output":"--- PASS: TestWriteOpenAIPassthroughResponseHeaders_RelaysReasoningIncluded (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughResponseHeaders_RelaysReasoningIncluded","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature","Output":"=== RUN TestEnsureOpenAIRemoteCompactionV2BetaFeature\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature/absent_sets_feature"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature/absent_sets_feature","Output":"=== RUN TestEnsureOpenAIRemoteCompactionV2BetaFeature/absent_sets_feature\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature/absent_sets_feature","Output":"--- PASS: TestEnsureOpenAIRemoteCompactionV2BetaFeature/absent_sets_feature (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature/absent_sets_feature","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature/present_unchanged"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature/present_unchanged","Output":"=== RUN TestEnsureOpenAIRemoteCompactionV2BetaFeature/present_unchanged\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature/present_unchanged","Output":"--- PASS: TestEnsureOpenAIRemoteCompactionV2BetaFeature/present_unchanged (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature/present_unchanged","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature/other_tokens_merged"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature/other_tokens_merged","Output":"=== RUN TestEnsureOpenAIRemoteCompactionV2BetaFeature/other_tokens_merged\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature/other_tokens_merged","Output":"--- PASS: TestEnsureOpenAIRemoteCompactionV2BetaFeature/other_tokens_merged (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature/other_tokens_merged","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature/multi_line_values_merged_single_line"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature/multi_line_values_merged_single_line","Output":"=== RUN TestEnsureOpenAIRemoteCompactionV2BetaFeature/multi_line_values_merged_single_line\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature/multi_line_values_merged_single_line","Output":"--- PASS: TestEnsureOpenAIRemoteCompactionV2BetaFeature/multi_line_values_merged_single_line (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature/multi_line_values_merged_single_line","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature","Output":"--- PASS: TestEnsureOpenAIRemoteCompactionV2BetaFeature (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures","Output":"=== RUN TestApplyOpenAICodexBetaFeatures\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/oauth_plain_request_gets_default_codex_shape"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/oauth_plain_request_gets_default_codex_shape","Output":"=== RUN TestApplyOpenAICodexBetaFeatures/oauth_plain_request_gets_default_codex_shape\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/oauth_plain_request_gets_default_codex_shape","Output":"--- PASS: TestApplyOpenAICodexBetaFeatures/oauth_plain_request_gets_default_codex_shape (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/oauth_plain_request_gets_default_codex_shape","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/client_declared_header_preserved"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/client_declared_header_preserved","Output":"=== RUN TestApplyOpenAICodexBetaFeatures/client_declared_header_preserved\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/client_declared_header_preserved","Output":"--- PASS: TestApplyOpenAICodexBetaFeatures/client_declared_header_preserved (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/client_declared_header_preserved","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/native_v2_forces_feature_even_when_client_trimmed_it"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/native_v2_forces_feature_even_when_client_trimmed_it","Output":"=== RUN TestApplyOpenAICodexBetaFeatures/native_v2_forces_feature_even_when_client_trimmed_it\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/native_v2_forces_feature_even_when_client_trimmed_it","Output":"--- PASS: TestApplyOpenAICodexBetaFeatures/native_v2_forces_feature_even_when_client_trimmed_it (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/native_v2_forces_feature_even_when_client_trimmed_it","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/native_v2_applies_to_non_oauth_too"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/native_v2_applies_to_non_oauth_too","Output":"=== RUN TestApplyOpenAICodexBetaFeatures/native_v2_applies_to_non_oauth_too\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/native_v2_applies_to_non_oauth_too","Output":"--- PASS: TestApplyOpenAICodexBetaFeatures/native_v2_applies_to_non_oauth_too (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/native_v2_applies_to_non_oauth_too","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/non_oauth_plain_request_untouched"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/non_oauth_plain_request_untouched","Output":"=== RUN TestApplyOpenAICodexBetaFeatures/non_oauth_plain_request_untouched\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/non_oauth_plain_request_untouched","Output":"--- PASS: TestApplyOpenAICodexBetaFeatures/non_oauth_plain_request_untouched (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/non_oauth_plain_request_untouched","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/nil_account_plain_request_untouched"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/nil_account_plain_request_untouched","Output":"=== RUN TestApplyOpenAICodexBetaFeatures/nil_account_plain_request_untouched\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/nil_account_plain_request_untouched","Output":"--- PASS: TestApplyOpenAICodexBetaFeatures/nil_account_plain_request_untouched (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/nil_account_plain_request_untouched","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures","Output":"--- PASS: TestApplyOpenAICodexBetaFeatures (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeaders_CarriesSessionBetaFeatures"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeaders_CarriesSessionBetaFeatures","Output":"=== RUN TestBuildOpenAIWSHeaders_CarriesSessionBetaFeatures\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeaders_CarriesSessionBetaFeatures","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.217Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":0,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeaders_CarriesSessionBetaFeatures","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.217Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":0,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeaders_CarriesSessionBetaFeatures","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.217Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":0,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeaders_CarriesSessionBetaFeatures","Output":"--- PASS: TestBuildOpenAIWSHeaders_CarriesSessionBetaFeatures (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeaders_CarriesSessionBetaFeatures","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLatestCodexStableReleaseVersion"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLatestCodexStableReleaseVersion","Output":"=== RUN TestLatestCodexStableReleaseVersion\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLatestCodexStableReleaseVersion","Output":"--- PASS: TestLatestCodexStableReleaseVersion (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLatestCodexStableReleaseVersion","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncWritesLatestStableVersion"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncWritesLatestStableVersion","Output":"=== RUN TestOpenAICodexVersionSyncWritesLatestStableVersion\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncWritesLatestStableVersion","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:29.217Z\",\"logger\":\"slog\",\"msg\":\"openai_codex_version_synced\",\"service\":\"sub2api\",\"env\":\"test\",\"previous\":\"\",\"version\":\"0.146.0\"}\n"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncWritesLatestStableVersion","Output":"--- PASS: TestOpenAICodexVersionSyncWritesLatestStableVersion (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncWritesLatestStableVersion","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncNeverMovesBackwards"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncNeverMovesBackwards","Output":"=== RUN TestOpenAICodexVersionSyncNeverMovesBackwards\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncNeverMovesBackwards","Output":"--- PASS: TestOpenAICodexVersionSyncNeverMovesBackwards (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncNeverMovesBackwards","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncSkippedWhenDisabled"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncSkippedWhenDisabled","Output":"=== RUN TestOpenAICodexVersionSyncSkippedWhenDisabled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncSkippedWhenDisabled","Output":"--- PASS: TestOpenAICodexVersionSyncSkippedWhenDisabled (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncSkippedWhenDisabled","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncEnabledByDefault"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncEnabledByDefault","Output":"=== RUN TestOpenAICodexVersionSyncEnabledByDefault\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncEnabledByDefault","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:29.217Z\",\"logger\":\"slog\",\"msg\":\"openai_codex_version_synced\",\"service\":\"sub2api\",\"env\":\"test\",\"previous\":\"\",\"version\":\"0.146.0\"}\n"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncEnabledByDefault","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:29.217Z\",\"logger\":\"slog\",\"msg\":\"openai_codex_version_synced\",\"service\":\"sub2api\",\"env\":\"test\",\"previous\":\"\",\"version\":\"0.146.0\"}\n"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncEnabledByDefault","Output":"--- PASS: TestOpenAICodexVersionSyncEnabledByDefault (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncEnabledByDefault","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncKeepsValueOnFetchError"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncKeepsValueOnFetchError","Output":"=== RUN TestOpenAICodexVersionSyncKeepsValueOnFetchError\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncKeepsValueOnFetchError","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:29.217Z\",\"logger\":\"slog\",\"msg\":\"openai_codex_version_sync_latest_fetch_failed\",\"service\":\"sub2api\",\"env\":\"test\",\"error\":\"network down\"}\n"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncKeepsValueOnFetchError","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:29.217Z\",\"logger\":\"slog\",\"msg\":\"openai_codex_version_sync_fetch_failed\",\"service\":\"sub2api\",\"env\":\"test\",\"error\":\"network down\"}\n"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncKeepsValueOnFetchError","Output":"--- PASS: TestOpenAICodexVersionSyncKeepsValueOnFetchError (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncKeepsValueOnFetchError","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncUsesLatestReleaseEndpoint"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncUsesLatestReleaseEndpoint","Output":"=== RUN TestOpenAICodexVersionSyncUsesLatestReleaseEndpoint\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncUsesLatestReleaseEndpoint","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:29.217Z\",\"logger\":\"slog\",\"msg\":\"openai_codex_version_synced\",\"service\":\"sub2api\",\"env\":\"test\",\"previous\":\"\",\"version\":\"0.146.0\"}\n"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncUsesLatestReleaseEndpoint","Output":"--- PASS: TestOpenAICodexVersionSyncUsesLatestReleaseEndpoint (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncUsesLatestReleaseEndpoint","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList","Output":"=== RUN TestOpenAICodexVersionSyncFallsBackToReleaseList\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_属于其他_tag_家族"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_属于其他_tag_家族","Output":"=== RUN TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_属于其他_tag_家族\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_属于其他_tag_家族","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:29.217Z\",\"logger\":\"slog\",\"msg\":\"openai_codex_version_synced\",\"service\":\"sub2api\",\"env\":\"test\",\"previous\":\"\",\"version\":\"0.146.0\"}\n"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_属于其他_tag_家族","Output":"--- PASS: TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_属于其他_tag_家族 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_属于其他_tag_家族","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_是预发布"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_是预发布","Output":"=== RUN TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_是预发布\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_是预发布","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:29.217Z\",\"logger\":\"slog\",\"msg\":\"openai_codex_version_synced\",\"service\":\"sub2api\",\"env\":\"test\",\"previous\":\"\",\"version\":\"0.146.0\"}\n"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_是预发布","Output":"--- PASS: TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_是预发布 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_是预发布","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_抓取失败"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_抓取失败","Output":"=== RUN TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_抓取失败\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_抓取失败","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:29.217Z\",\"logger\":\"slog\",\"msg\":\"openai_codex_version_sync_latest_fetch_failed\",\"service\":\"sub2api\",\"env\":\"test\",\"error\":\"network down\"}\n"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_抓取失败","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:29.217Z\",\"logger\":\"slog\",\"msg\":\"openai_codex_version_synced\",\"service\":\"sub2api\",\"env\":\"test\",\"previous\":\"\",\"version\":\"0.146.0\"}\n"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_抓取失败","Output":"--- PASS: TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_抓取失败 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_抓取失败","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_为空"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_为空","Output":"=== RUN TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_为空\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_为空","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:29.217Z\",\"logger\":\"slog\",\"msg\":\"openai_codex_version_synced\",\"service\":\"sub2api\",\"env\":\"test\",\"previous\":\"\",\"version\":\"0.146.0\"}\n"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_为空","Output":"--- PASS: TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_为空 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_为空","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList","Output":"--- PASS: TestOpenAICodexVersionSyncFallsBackToReleaseList (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncLatestSharesFiltering"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncLatestSharesFiltering","Output":"=== RUN TestOpenAICodexVersionSyncLatestSharesFiltering\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncLatestSharesFiltering","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:29.217Z\",\"logger\":\"slog\",\"msg\":\"openai_codex_version_synced\",\"service\":\"sub2api\",\"env\":\"test\",\"previous\":\"\",\"version\":\"0.146.0\"}\n"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncLatestSharesFiltering","Output":"--- PASS: TestOpenAICodexVersionSyncLatestSharesFiltering (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncLatestSharesFiltering","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncStartRequiresDependencies"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncStartRequiresDependencies","Output":"=== RUN TestOpenAICodexVersionSyncStartRequiresDependencies\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncStartRequiresDependencies","Output":"--- PASS: TestOpenAICodexVersionSyncStartRequiresDependencies (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncStartRequiresDependencies","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority","Output":"=== RUN TestGetOpenAICodexClientVersionPriority\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/面板覆写优先"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/面板覆写优先","Output":"=== RUN TestGetOpenAICodexClientVersionPriority/面板覆写优先\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/面板覆写优先","Output":"--- PASS: TestGetOpenAICodexClientVersionPriority/面板覆写优先 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/面板覆写优先","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/覆写为空时用同步值"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/覆写为空时用同步值","Output":"=== RUN TestGetOpenAICodexClientVersionPriority/覆写为空时用同步值\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/覆写为空时用同步值","Output":"--- PASS: TestGetOpenAICodexClientVersionPriority/覆写为空时用同步值 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/覆写为空时用同步值","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/两者皆空时用内置常量"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/两者皆空时用内置常量","Output":"=== RUN TestGetOpenAICodexClientVersionPriority/两者皆空时用内置常量\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/两者皆空时用内置常量","Output":"--- PASS: TestGetOpenAICodexClientVersionPriority/两者皆空时用内置常量 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/两者皆空时用内置常量","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/非法覆写回退同步值"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/非法覆写回退同步值","Output":"=== RUN TestGetOpenAICodexClientVersionPriority/非法覆写回退同步值\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/非法覆写回退同步值","Output":"--- PASS: TestGetOpenAICodexClientVersionPriority/非法覆写回退同步值 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/非法覆写回退同步值","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/非法同步值回退内置常量"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/非法同步值回退内置常量","Output":"=== RUN TestGetOpenAICodexClientVersionPriority/非法同步值回退内置常量\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/非法同步值回退内置常量","Output":"--- PASS: TestGetOpenAICodexClientVersionPriority/非法同步值回退内置常量 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/非法同步值回退内置常量","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority","Output":"--- PASS: TestGetOpenAICodexClientVersionPriority (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionFallsBackOnError"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionFallsBackOnError","Output":"=== RUN TestGetOpenAICodexClientVersionFallsBackOnError\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionFallsBackOnError","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:29.217Z\",\"logger\":\"slog\",\"msg\":\"failed to get openai codex client version setting\",\"service\":\"sub2api\",\"env\":\"test\",\"error\":\"db down\"}\n"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionFallsBackOnError","Output":"--- PASS: TestGetOpenAICodexClientVersionFallsBackOnError (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionFallsBackOnError","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentBuildsFromVersion"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentBuildsFromVersion","Output":"=== RUN TestGetOpenAICodexCanonicalUserAgentBuildsFromVersion\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentBuildsFromVersion","Output":"--- PASS: TestGetOpenAICodexCanonicalUserAgentBuildsFromVersion (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentBuildsFromVersion","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion","Output":"=== RUN TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/陈旧面板_UA_跟随生效版本"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/陈旧面板_UA_跟随生效版本","Output":"=== RUN TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/陈旧面板_UA_跟随生效版本\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/陈旧面板_UA_跟随生效版本","Output":"--- PASS: TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/陈旧面板_UA_跟随生效版本 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/陈旧面板_UA_跟随生效版本","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/自定义指纹原样保留"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/自定义指纹原样保留","Output":"=== RUN TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/自定义指纹原样保留\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/自定义指纹原样保留","Output":"--- PASS: TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/自定义指纹原样保留 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/自定义指纹原样保留","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/TUI_UA_的首尾两个版本号同时更新"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/TUI_UA_的首尾两个版本号同时更新","Output":"=== RUN TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/TUI_UA_的首尾两个版本号同时更新\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/TUI_UA_的首尾两个版本号同时更新","Output":"--- PASS: TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/TUI_UA_的首尾两个版本号同时更新 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/TUI_UA_的首尾两个版本号同时更新","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/面板版本号覆写优先"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/面板版本号覆写优先","Output":"=== RUN TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/面板版本号覆写优先\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/面板版本号覆写优先","Output":"--- PASS: TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/面板版本号覆写优先 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/面板版本号覆写优先","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/非_Codex_形态原样返回"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/非_Codex_形态原样返回","Output":"=== RUN TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/非_Codex_形态原样返回\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/非_Codex_形态原样返回","Output":"--- PASS: TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/非_Codex_形态原样返回 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/非_Codex_形态原样返回","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion","Output":"--- PASS: TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialSkipsWhenRecentlySynced"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialSkipsWhenRecentlySynced","Output":"=== RUN TestOpenAICodexVersionSyncInitialSkipsWhenRecentlySynced\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialSkipsWhenRecentlySynced","Output":"--- PASS: TestOpenAICodexVersionSyncInitialSkipsWhenRecentlySynced (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialSkipsWhenRecentlySynced","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing","Output":"=== RUN TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/同步值已过期"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/同步值已过期","Output":"=== RUN TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/同步值已过期\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/同步值已过期","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:29.217Z\",\"logger\":\"slog\",\"msg\":\"openai_codex_version_synced\",\"service\":\"sub2api\",\"env\":\"test\",\"previous\":\"0.146.0\",\"version\":\"0.147.0\"}\n"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/同步值已过期","Output":"--- PASS: TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/同步值已过期 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/同步值已过期","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/尚无同步值"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/尚无同步值","Output":"=== RUN TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/尚无同步值\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/尚无同步值","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:29.217Z\",\"logger\":\"slog\",\"msg\":\"openai_codex_version_synced\",\"service\":\"sub2api\",\"env\":\"test\",\"previous\":\"\",\"version\":\"0.146.0\"}\n"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/尚无同步值","Output":"--- PASS: TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/尚无同步值 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/尚无同步值","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing","Output":"--- PASS: TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexVersionComparisonIsNumericNotLexical"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexVersionComparisonIsNumericNotLexical","Output":"=== RUN TestCodexVersionComparisonIsNumericNotLexical\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexVersionComparisonIsNumericNotLexical","Output":"--- PASS: TestCodexVersionComparisonIsNumericNotLexical (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexVersionComparisonIsNumericNotLexical","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetryRequiresExplicitCompact"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetryRequiresExplicitCompact","Output":"=== RUN TestPrepareOpenAICompactFallbackRetryRequiresExplicitCompact\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetryRequiresExplicitCompact","Output":"--- PASS: TestPrepareOpenAICompactFallbackRetryRequiresExplicitCompact (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetryRequiresExplicitCompact","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetryPreservesNativeTriggerAndContext"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetryPreservesNativeTriggerAndContext","Output":"=== RUN TestPrepareOpenAICompactFallbackRetryPreservesNativeTriggerAndContext\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetryPreservesNativeTriggerAndContext","Output":"--- PASS: TestPrepareOpenAICompactFallbackRetryPreservesNativeTriggerAndContext (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetryPreservesNativeTriggerAndContext","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactFallbackModelPrefersAccountMapping"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactFallbackModelPrefersAccountMapping","Output":"=== RUN TestResolveOpenAICompactFallbackModelPrefersAccountMapping\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactFallbackModelPrefersAccountMapping","Output":"--- PASS: TestResolveOpenAICompactFallbackModelPrefersAccountMapping (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactFallbackModelPrefersAccountMapping","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardUsesGlobalCompactModelOnInitialLegacyRequest"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardUsesGlobalCompactModelOnInitialLegacyRequest","Output":"=== RUN TestOpenAIGatewayForwardUsesGlobalCompactModelOnInitialLegacyRequest\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardUsesGlobalCompactModelOnInitialLegacyRequest","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:29.217Z\",\"msg\":\"[OpenAI] Compact model mapping applied: gpt-5.5 -\u003e global-compact (account: openai-oauth, isCodexCLI: false)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardUsesGlobalCompactModelOnInitialLegacyRequest","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.217Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"global-compact\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardUsesGlobalCompactModelOnInitialLegacyRequest","Output":"--- PASS: TestOpenAIGatewayForwardUsesGlobalCompactModelOnInitialLegacyRequest (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardUsesGlobalCompactModelOnInitialLegacyRequest","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetryLegacyPathAndSingleAttemptGuard"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetryLegacyPathAndSingleAttemptGuard","Output":"=== RUN TestPrepareOpenAICompactFallbackRetryLegacyPathAndSingleAttemptGuard\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetryLegacyPathAndSingleAttemptGuard","Output":"--- PASS: TestPrepareOpenAICompactFallbackRetryLegacyPathAndSingleAttemptGuard (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetryLegacyPathAndSingleAttemptGuard","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetryDoesNotHideSpecificBusinessFailure"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetryDoesNotHideSpecificBusinessFailure","Output":"=== RUN TestPrepareOpenAICompactFallbackRetryDoesNotHideSpecificBusinessFailure\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetryDoesNotHideSpecificBusinessFailure","Output":"--- PASS: TestPrepareOpenAICompactFallbackRetryDoesNotHideSpecificBusinessFailure (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetryDoesNotHideSpecificBusinessFailure","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage","Output":"=== RUN TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/explicit_unsupported_model"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/explicit_unsupported_model","Output":"=== RUN TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/explicit_unsupported_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/explicit_unsupported_model","Output":"--- PASS: TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/explicit_unsupported_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/explicit_unsupported_model","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/named_missing_model"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/named_missing_model","Output":"=== RUN TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/named_missing_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/named_missing_model","Output":"--- PASS: TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/named_missing_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/named_missing_model","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/unsupported_model_code-like_message"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/unsupported_model_code-like_message","Output":"=== RUN TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/unsupported_model_code-like_message\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/unsupported_model_code-like_message","Output":"--- PASS: TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/unsupported_model_code-like_message (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/unsupported_model_code-like_message","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/unsupported_model_feature"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/unsupported_model_feature","Output":"=== RUN TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/unsupported_model_feature\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/unsupported_model_feature","Output":"--- PASS: TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/unsupported_model_feature (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/unsupported_model_feature","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/unsupported_parameter_for_model"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/unsupported_parameter_for_model","Output":"=== RUN TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/unsupported_parameter_for_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/unsupported_parameter_for_model","Output":"--- PASS: TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/unsupported_parameter_for_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/unsupported_parameter_for_model","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage","Output":"--- PASS: TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetrySkipsSameModel"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetrySkipsSameModel","Output":"=== RUN TestPrepareOpenAICompactFallbackRetrySkipsSameModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetrySkipsSameModel","Output":"--- PASS: TestPrepareOpenAICompactFallbackRetrySkipsSameModel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetrySkipsSameModel","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesExplicitNativeCompactHTTPFailureOnce"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesExplicitNativeCompactHTTPFailureOnce","Output":"=== RUN TestOpenAIGatewayForwardRetriesExplicitNativeCompactHTTPFailureOnce\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesExplicitNativeCompactHTTPFailureOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.217Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesExplicitNativeCompactHTTPFailureOnce","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:29.218Z\",\"msg\":\"[OpenAI] Retrying explicit compact request once with fallback model (account: openai-oauth, from: gpt-5.5, to: gpt-5.4, upstream_code: context_length_exceeded)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesExplicitNativeCompactHTTPFailureOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.218Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesExplicitNativeCompactHTTPFailureOnce","Output":"--- PASS: TestOpenAIGatewayForwardRetriesExplicitNativeCompactHTTPFailureOnce (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesExplicitNativeCompactHTTPFailureOnce","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardNonStreamCompactRetryRecordsAttemptWithManagedProxy"}
- {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardNonStreamCompactRetryRecordsAttemptWithManagedProxy","Output":"=== RUN TestOpenAIGatewayForwardNonStreamCompactRetryRecordsAttemptWithManagedProxy\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardNonStreamCompactRetryRecordsAttemptWithManagedProxy","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.218Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardNonStreamCompactRetryRecordsAttemptWithManagedProxy","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.218Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardNonStreamCompactRetryRecordsAttemptWithManagedProxy","Output":"--- PASS: TestOpenAIGatewayForwardNonStreamCompactRetryRecordsAttemptWithManagedProxy (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardNonStreamCompactRetryRecordsAttemptWithManagedProxy","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardCompactFailoverEventCarriesManagedProxy"}
- {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardCompactFailoverEventCarriesManagedProxy","Output":"=== RUN TestOpenAIGatewayForwardCompactFailoverEventCarriesManagedProxy\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardCompactFailoverEventCarriesManagedProxy","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.218Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardCompactFailoverEventCarriesManagedProxy","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.218Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardCompactFailoverEventCarriesManagedProxy","Output":"--- PASS: TestOpenAIGatewayForwardCompactFailoverEventCarriesManagedProxy (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardCompactFailoverEventCarriesManagedProxy","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesExplicitNativeCompactSSEFailureBeforeOutput"}
- {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesExplicitNativeCompactSSEFailureBeforeOutput","Output":"=== RUN TestOpenAIGatewayForwardRetriesExplicitNativeCompactSSEFailureBeforeOutput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesExplicitNativeCompactSSEFailureBeforeOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.218Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesExplicitNativeCompactSSEFailureBeforeOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.218Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesExplicitNativeCompactSSEFailureBeforeOutput","Output":"--- PASS: TestOpenAIGatewayForwardRetriesExplicitNativeCompactSSEFailureBeforeOutput (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesExplicitNativeCompactSSEFailureBeforeOutput","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesStreamingCompactFailureBeforeOutput"}
- {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesStreamingCompactFailureBeforeOutput","Output":"=== RUN TestOpenAIGatewayForwardRetriesStreamingCompactFailureBeforeOutput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesStreamingCompactFailureBeforeOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.218Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesStreamingCompactFailureBeforeOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.218Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesStreamingCompactFailureBeforeOutput","Output":"--- PASS: TestOpenAIGatewayForwardRetriesStreamingCompactFailureBeforeOutput (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesStreamingCompactFailureBeforeOutput","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardDoesNotRecurseWhenCompactFallbackAlsoFails"}
- {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardDoesNotRecurseWhenCompactFallbackAlsoFails","Output":"=== RUN TestOpenAIGatewayForwardDoesNotRecurseWhenCompactFallbackAlsoFails\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardDoesNotRecurseWhenCompactFallbackAlsoFails","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.218Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardDoesNotRecurseWhenCompactFallbackAlsoFails","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.218Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardDoesNotRecurseWhenCompactFallbackAlsoFails","Output":"--- PASS: TestOpenAIGatewayForwardDoesNotRecurseWhenCompactFallbackAlsoFails (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardDoesNotRecurseWhenCompactFallbackAlsoFails","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughCompactFallbackSecondStreamFailureUsesStandardErrorPath"}
- {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughCompactFallbackSecondStreamFailureUsesStandardErrorPath","Output":"=== RUN TestOpenAIPassthroughCompactFallbackSecondStreamFailureUsesStandardErrorPath\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughCompactFallbackSecondStreamFailureUsesStandardErrorPath","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:29.218Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=1 name=openai-oauth type=oauth model=gpt-5.5 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughCompactFallbackSecondStreamFailureUsesStandardErrorPath","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.218Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":1,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:29.2191639+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughCompactFallbackSecondStreamFailureUsesStandardErrorPath","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:29.219Z\",\"msg\":\"[OpenAI passthrough] Retrying explicit compact request once with fallback model (account: openai-oauth, from: gpt-5.5, to: gpt-5.4, upstream_code: )\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:29.2191639+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughCompactFallbackSecondStreamFailureUsesStandardErrorPath","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.219Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:29.2191639+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughCompactFallbackSecondStreamFailureUsesStandardErrorPath","Output":"--- PASS: TestOpenAIPassthroughCompactFallbackSecondStreamFailureUsesStandardErrorPath (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2191639+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughCompactFallbackSecondStreamFailureUsesStandardErrorPath","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2191639+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CompactOnlyModelMappingOverridesOAuthUpstreamModel"}
- {"Time":"2026-09-12T11:38:29.2191639+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CompactOnlyModelMappingOverridesOAuthUpstreamModel","Output":"=== RUN TestOpenAIGatewayService_Forward_CompactOnlyModelMappingOverridesOAuthUpstreamModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2191639+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CompactOnlyModelMappingOverridesOAuthUpstreamModel","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:29.219Z\",\"msg\":\"[OpenAI] Model mapping applied: gpt-5.4 -\u003e gpt-5.3-codex (account: openai-oauth, isCodexCLI: false)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:29.2191639+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CompactOnlyModelMappingOverridesOAuthUpstreamModel","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:29.219Z\",\"msg\":\"[OpenAI] Compact model mapping applied: gpt-5.4 -\u003e gpt-5.4-openai-compact (account: openai-oauth, isCodexCLI: false)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:29.2191639+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CompactOnlyModelMappingOverridesOAuthUpstreamModel","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.219Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.4-openai-compact\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:29.2191639+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CompactOnlyModelMappingOverridesOAuthUpstreamModel","Output":"--- PASS: TestOpenAIGatewayService_Forward_CompactOnlyModelMappingOverridesOAuthUpstreamModel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2191639+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CompactOnlyModelMappingOverridesOAuthUpstreamModel","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2191639+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_APIKeyCompactSanitizesStatelessReplayAfterStoreWasDropped"}
- {"Time":"2026-09-12T11:38:29.2191639+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_APIKeyCompactSanitizesStatelessReplayAfterStoreWasDropped","Output":"=== RUN TestOpenAIGatewayService_Forward_APIKeyCompactSanitizesStatelessReplayAfterStoreWasDropped\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2191639+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_APIKeyCompactSanitizesStatelessReplayAfterStoreWasDropped","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.219Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":7,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:29.2191639+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_APIKeyCompactSanitizesStatelessReplayAfterStoreWasDropped","Output":"--- PASS: TestOpenAIGatewayService_Forward_APIKeyCompactSanitizesStatelessReplayAfterStoreWasDropped (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2191639+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_APIKeyCompactSanitizesStatelessReplayAfterStoreWasDropped","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2191639+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NormalizesCompactionTriggerAfterHistoryCleanup"}
- {"Time":"2026-09-12T11:38:29.2191639+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NormalizesCompactionTriggerAfterHistoryCleanup","Output":"=== RUN TestOpenAIGatewayService_Forward_NormalizesCompactionTriggerAfterHistoryCleanup\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.220202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NormalizesCompactionTriggerAfterHistoryCleanup","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.220Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":4,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:29.220202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NormalizesCompactionTriggerAfterHistoryCleanup","Output":"--- PASS: TestOpenAIGatewayService_Forward_NormalizesCompactionTriggerAfterHistoryCleanup (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.220202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NormalizesCompactionTriggerAfterHistoryCleanup","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.220202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NonCompactRequestIgnoresCompactOnlyModelMapping"}
- {"Time":"2026-09-12T11:38:29.220202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NonCompactRequestIgnoresCompactOnlyModelMapping","Output":"=== RUN TestOpenAIGatewayService_Forward_NonCompactRequestIgnoresCompactOnlyModelMapping\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.220202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NonCompactRequestIgnoresCompactOnlyModelMapping","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.220Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":2,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:29.220202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NonCompactRequestIgnoresCompactOnlyModelMapping","Output":"--- PASS: TestOpenAIGatewayService_Forward_NonCompactRequestIgnoresCompactOnlyModelMapping (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.220202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NonCompactRequestIgnoresCompactOnlyModelMapping","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.220202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CompactOnlyModelMappingOverridesUpstreamModel"}
- {"Time":"2026-09-12T11:38:29.220202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CompactOnlyModelMappingOverridesUpstreamModel","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_CompactOnlyModelMappingOverridesUpstreamModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CompactOnlyModelMappingOverridesUpstreamModel","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:29.220Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=3 name=openai-oauth-pass type=oauth model=gpt-5.4 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CompactOnlyModelMappingOverridesUpstreamModel","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.220Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":3,\"final_model\":\"gpt-5.4-openai-compact\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CompactOnlyModelMappingOverridesUpstreamModel","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_CompactOnlyModelMappingOverridesUpstreamModel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CompactOnlyModelMappingOverridesUpstreamModel","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_SuccessMarksSupported"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_SuccessMarksSupported","Output":"=== RUN TestBuildOpenAICompactProbeExtraUpdates_SuccessMarksSupported\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_SuccessMarksSupported","Output":"--- PASS: TestBuildOpenAICompactProbeExtraUpdates_SuccessMarksSupported (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_SuccessMarksSupported","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_404MarksUnsupported"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_404MarksUnsupported","Output":"=== RUN TestBuildOpenAICompactProbeExtraUpdates_404MarksUnsupported\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_404MarksUnsupported","Output":"--- PASS: TestBuildOpenAICompactProbeExtraUpdates_404MarksUnsupported (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_404MarksUnsupported","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_502DoesNotMarkUnsupported"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_502DoesNotMarkUnsupported","Output":"=== RUN TestBuildOpenAICompactProbeExtraUpdates_502DoesNotMarkUnsupported\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_502DoesNotMarkUnsupported","Output":"--- PASS: TestBuildOpenAICompactProbeExtraUpdates_502DoesNotMarkUnsupported (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_502DoesNotMarkUnsupported","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_RequestErrorDoesNotMarkUnsupported"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_RequestErrorDoesNotMarkUnsupported","Output":"=== RUN TestBuildOpenAICompactProbeExtraUpdates_RequestErrorDoesNotMarkUnsupported\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_RequestErrorDoesNotMarkUnsupported","Output":"--- PASS: TestBuildOpenAICompactProbeExtraUpdates_RequestErrorDoesNotMarkUnsupported (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_RequestErrorDoesNotMarkUnsupported","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_NoResponseClearsLastStatus"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_NoResponseClearsLastStatus","Output":"=== RUN TestBuildOpenAICompactProbeExtraUpdates_NoResponseClearsLastStatus\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_NoResponseClearsLastStatus","Output":"--- PASS: TestBuildOpenAICompactProbeExtraUpdates_NoResponseClearsLastStatus (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_NoResponseClearsLastStatus","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_UnknownModelDoesNotMarkUnsupported"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_UnknownModelDoesNotMarkUnsupported","Output":"=== RUN TestBuildOpenAICompactProbeExtraUpdates_UnknownModelDoesNotMarkUnsupported\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_UnknownModelDoesNotMarkUnsupported","Output":"--- PASS: TestBuildOpenAICompactProbeExtraUpdates_UnknownModelDoesNotMarkUnsupported (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_UnknownModelDoesNotMarkUnsupported","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_EmptyFailureBodyFallsBackToHTTPStatus"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_EmptyFailureBodyFallsBackToHTTPStatus","Output":"=== RUN TestBuildOpenAICompactProbeExtraUpdates_EmptyFailureBodyFallsBackToHTTPStatus\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_EmptyFailureBodyFallsBackToHTTPStatus","Output":"--- PASS: TestBuildOpenAICompactProbeExtraUpdates_EmptyFailureBodyFallsBackToHTTPStatus (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_EmptyFailureBodyFallsBackToHTTPStatus","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_2xxWithoutCompactionItemMarksUnsupported"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_2xxWithoutCompactionItemMarksUnsupported","Output":"=== RUN TestBuildOpenAICompactProbeExtraUpdates_2xxWithoutCompactionItemMarksUnsupported\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_2xxWithoutCompactionItemMarksUnsupported","Output":"--- PASS: TestBuildOpenAICompactProbeExtraUpdates_2xxWithoutCompactionItemMarksUnsupported (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_2xxWithoutCompactionItemMarksUnsupported","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCreateOpenAICompactProbePayload_NativeV2Shape"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCreateOpenAICompactProbePayload_NativeV2Shape","Output":"=== RUN TestCreateOpenAICompactProbePayload_NativeV2Shape\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCreateOpenAICompactProbePayload_NativeV2Shape","Output":"--- PASS: TestCreateOpenAICompactProbePayload_NativeV2Shape (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCreateOpenAICompactProbePayload_NativeV2Shape","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactProbeFoundCompactionItem"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactProbeFoundCompactionItem","Output":"=== RUN TestOpenAICompactProbeFoundCompactionItem\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactProbeFoundCompactionItem","Output":"--- PASS: TestOpenAICompactProbeFoundCompactionItem (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactProbeFoundCompactionItem","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactProbeFoundCompactionItem_TerminalResponseOutput"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactProbeFoundCompactionItem_TerminalResponseOutput","Output":"=== RUN TestOpenAICompactProbeFoundCompactionItem_TerminalResponseOutput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactProbeFoundCompactionItem_TerminalResponseOutput","Output":"--- PASS: TestOpenAICompactProbeFoundCompactionItem_TerminalResponseOutput (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactProbeFoundCompactionItem_TerminalResponseOutput","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompactRequestBodyPreservesServiceTier"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompactRequestBodyPreservesServiceTier","Output":"=== RUN TestNormalizeOpenAICompactRequestBodyPreservesServiceTier\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompactRequestBodyPreservesServiceTier","Output":"--- PASS: TestNormalizeOpenAICompactRequestBodyPreservesServiceTier (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompactRequestBodyPreservesServiceTier","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint","Output":"=== RUN TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint/ordinary"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint/ordinary","Output":"=== RUN TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint/ordinary\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint/ordinary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.220Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":0,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"priority\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint/ordinary","Output":"--- PASS: TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint/ordinary (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint/ordinary","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint/passthrough"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint/passthrough","Output":"=== RUN TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint/passthrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint/passthrough","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.220Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":0,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"priority\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint/passthrough","Output":"--- PASS: TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint/passthrough (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint/passthrough","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint","Output":"--- PASS: TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint","Elapsed":0}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStartOpenAICompactSSEKeepalive_NoopWhenUnmarkedOrDisabled"}
- {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStartOpenAICompactSSEKeepalive_NoopWhenUnmarkedOrDisabled","Output":"=== RUN TestStartOpenAICompactSSEKeepalive_NoopWhenUnmarkedOrDisabled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.6217059+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStartOpenAICompactSSEKeepalive_NoopWhenUnmarkedOrDisabled","Output":"--- PASS: TestStartOpenAICompactSSEKeepalive_NoopWhenUnmarkedOrDisabled (0.40s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.6217059+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStartOpenAICompactSSEKeepalive_NoopWhenUnmarkedOrDisabled","Elapsed":0.4}
- {"Time":"2026-09-12T11:38:29.6217059+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSSEKeepalive_CommitsHeadersAndComments"}
- {"Time":"2026-09-12T11:38:29.6217059+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSSEKeepalive_CommitsHeadersAndComments","Output":"=== RUN TestOpenAICompactSSEKeepalive_CommitsHeadersAndComments\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.8222178+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSSEKeepalive_CommitsHeadersAndComments","Output":"--- PASS: TestOpenAICompactSSEKeepalive_CommitsHeadersAndComments (0.20s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.8222178+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSSEKeepalive_CommitsHeadersAndComments","Elapsed":0.2}
- {"Time":"2026-09-12T11:38:29.8222178+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSSEKeepalive_StopBeforeFirstBeatKeepsWriterUntouched"}
- {"Time":"2026-09-12T11:38:29.8222178+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSSEKeepalive_StopBeforeFirstBeatKeepsWriterUntouched","Output":"=== RUN TestOpenAICompactSSEKeepalive_StopBeforeFirstBeatKeepsWriterUntouched\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.9776705+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Output":"testing: warning: no tests to run\n"}
- {"Time":"2026-09-12T11:38:29.9776705+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Output":"PASS\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:29.9786934+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Output":"ok \tgithub.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint\t0.766s [no tests to run]\n"}
- {"Time":"2026-09-12T11:38:29.9786934+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Elapsed":0.766}
- {"Time":"2026-09-12T11:38:30.022571+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSSEKeepalive_StopBeforeFirstBeatKeepsWriterUntouched","Output":"--- PASS: TestOpenAICompactSSEKeepalive_StopBeforeFirstBeatKeepsWriterUntouched (0.20s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:30.022571+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSSEKeepalive_StopBeforeFirstBeatKeepsWriterUntouched","Elapsed":0.2}
- {"Time":"2026-09-12T11:38:30.022571+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAdjustedWrittenSizeExcludesResponsesStreamKeepalive"}
- {"Time":"2026-09-12T11:38:30.022571+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAdjustedWrittenSizeExcludesResponsesStreamKeepalive","Output":"=== RUN TestOpenAIAdjustedWrittenSizeExcludesResponsesStreamKeepalive\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:30.022571+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAdjustedWrittenSizeExcludesResponsesStreamKeepalive","Output":"--- PASS: TestOpenAIAdjustedWrittenSizeExcludesResponsesStreamKeepalive (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:30.022571+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAdjustedWrittenSizeExcludesResponsesStreamKeepalive","Elapsed":0}
- {"Time":"2026-09-12T11:38:30.022571+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAICompactSSEBridge_AfterKeepaliveCommitAppendsEvents"}
- {"Time":"2026-09-12T11:38:30.022571+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAICompactSSEBridge_AfterKeepaliveCommitAppendsEvents","Output":"=== RUN TestWriteOpenAICompactSSEBridge_AfterKeepaliveCommitAppendsEvents\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:30.2228365+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAICompactSSEBridge_AfterKeepaliveCommitAppendsEvents","Output":"--- PASS: TestWriteOpenAICompactSSEBridge_AfterKeepaliveCommitAppendsEvents (0.20s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:30.2228365+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAICompactSSEBridge_AfterKeepaliveCommitAppendsEvents","Elapsed":0.2}
- {"Time":"2026-09-12T11:38:30.2228365+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAICompactSSEBridge_AfterKeepaliveCommitFailureEmitsFailedEvent"}
- {"Time":"2026-09-12T11:38:30.2228365+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAICompactSSEBridge_AfterKeepaliveCommitFailureEmitsFailedEvent","Output":"=== RUN TestWriteOpenAICompactSSEBridge_AfterKeepaliveCommitFailureEmitsFailedEvent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:30.4231752+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAICompactSSEBridge_AfterKeepaliveCommitFailureEmitsFailedEvent","Output":"--- PASS: TestWriteOpenAICompactSSEBridge_AfterKeepaliveCommitFailureEmitsFailedEvent (0.20s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:30.4231752+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAICompactSSEBridge_AfterKeepaliveCommitFailureEmitsFailedEvent","Elapsed":0.2}
- {"Time":"2026-09-12T11:38:30.4231752+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAICompactSSEBridge_BeforeKeepaliveCommitFailureKeepsJSONPath"}
- {"Time":"2026-09-12T11:38:30.4231752+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAICompactSSEBridge_BeforeKeepaliveCommitFailureKeepsJSONPath","Output":"=== RUN TestWriteOpenAICompactSSEBridge_BeforeKeepaliveCommitFailureKeepsJSONPath\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:30.4231752+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAICompactSSEBridge_BeforeKeepaliveCommitFailureKeepsJSONPath","Output":"--- PASS: TestWriteOpenAICompactSSEBridge_BeforeKeepaliveCommitFailureKeepsJSONPath (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:30.4231752+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAICompactSSEBridge_BeforeKeepaliveCommitFailureKeepsJSONPath","Elapsed":0}
- {"Time":"2026-09-12T11:38:30.4231752+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveWriter_RequestSideWriteSuspendsBeats"}
- {"Time":"2026-09-12T11:38:30.4231752+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveWriter_RequestSideWriteSuspendsBeats","Output":"=== RUN TestOpenAICompactKeepaliveWriter_RequestSideWriteSuspendsBeats\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:30.8235915+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveWriter_RequestSideWriteSuspendsBeats","Output":"--- PASS: TestOpenAICompactKeepaliveWriter_RequestSideWriteSuspendsBeats (0.40s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:30.8235915+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveWriter_RequestSideWriteSuspendsBeats","Elapsed":0.4}
- {"Time":"2026-09-12T11:38:30.8235915+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveWriter_NilInnerWriter_NoPanic"}
- {"Time":"2026-09-12T11:38:30.8235915+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveWriter_NilInnerWriter_NoPanic","Output":"=== RUN TestOpenAICompactKeepaliveWriter_NilInnerWriter_NoPanic\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:30.8235915+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveWriter_NilInnerWriter_NoPanic","Output":"--- PASS: TestOpenAICompactKeepaliveWriter_NilInnerWriter_NoPanic (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:30.8235915+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveWriter_NilInnerWriter_NoPanic","Elapsed":0}
- {"Time":"2026-09-12T11:38:30.8235915+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveWriter_NilKeepalive_NoPanic"}
- {"Time":"2026-09-12T11:38:30.8235915+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveWriter_NilKeepalive_NoPanic","Output":"=== RUN TestOpenAICompactKeepaliveWriter_NilKeepalive_NoPanic\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:30.8235915+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveWriter_NilKeepalive_NoPanic","Output":"--- PASS: TestOpenAICompactKeepaliveWriter_NilKeepalive_NoPanic (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:30.8235915+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveWriter_NilKeepalive_NoPanic","Elapsed":0}
- {"Time":"2026-09-12T11:38:30.8235915+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveWriter_DelegatesWhenReady"}
- {"Time":"2026-09-12T11:38:30.8235915+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveWriter_DelegatesWhenReady","Output":"=== RUN TestOpenAICompactKeepaliveWriter_DelegatesWhenReady\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:30.8235915+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveWriter_DelegatesWhenReady","Output":"--- PASS: TestOpenAICompactKeepaliveWriter_DelegatesWhenReady (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:30.8235915+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveWriter_DelegatesWhenReady","Elapsed":0}
- {"Time":"2026-09-12T11:38:30.8235915+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIFastPolicyBlockedResponse_AfterKeepaliveCommit"}
- {"Time":"2026-09-12T11:38:30.8235915+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIFastPolicyBlockedResponse_AfterKeepaliveCommit","Output":"=== RUN TestWriteOpenAIFastPolicyBlockedResponse_AfterKeepaliveCommit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.0239385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIFastPolicyBlockedResponse_AfterKeepaliveCommit","Output":"--- PASS: TestWriteOpenAIFastPolicyBlockedResponse_AfterKeepaliveCommit (0.20s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.0239385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIFastPolicyBlockedResponse_AfterKeepaliveCommit","Elapsed":0.2}
- {"Time":"2026-09-12T11:38:31.0239385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveAdjustedWrittenSize_ExcludesHeartbeatBytes"}
- {"Time":"2026-09-12T11:38:31.0239385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveAdjustedWrittenSize_ExcludesHeartbeatBytes","Output":"=== RUN TestOpenAICompactKeepaliveAdjustedWrittenSize_ExcludesHeartbeatBytes\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.2239999+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveAdjustedWrittenSize_ExcludesHeartbeatBytes","Output":"--- PASS: TestOpenAICompactKeepaliveAdjustedWrittenSize_ExcludesHeartbeatBytes (0.20s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.2239999+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveAdjustedWrittenSize_ExcludesHeartbeatBytes","Elapsed":0.2}
- {"Time":"2026-09-12T11:38:31.2239999+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamClientOutputStarted_IgnoresCompactKeepaliveBytes"}
- {"Time":"2026-09-12T11:38:31.2239999+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamClientOutputStarted_IgnoresCompactKeepaliveBytes","Output":"=== RUN TestOpenAIStreamClientOutputStarted_IgnoresCompactKeepaliveBytes\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamClientOutputStarted_IgnoresCompactKeepaliveBytes","Output":"--- PASS: TestOpenAIStreamClientOutputStarted_IgnoresCompactKeepaliveBytes (0.20s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamClientOutputStarted_IgnoresCompactKeepaliveBytes","Elapsed":0.2}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIFastPolicyBlockedResponse_BeforeKeepaliveCommit"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIFastPolicyBlockedResponse_BeforeKeepaliveCommit","Output":"=== RUN TestWriteOpenAIFastPolicyBlockedResponse_BeforeKeepaliveCommit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIFastPolicyBlockedResponse_BeforeKeepaliveCommit","Output":"--- PASS: TestWriteOpenAIFastPolicyBlockedResponse_BeforeKeepaliveCommit (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIFastPolicyBlockedResponse_BeforeKeepaliveCommit","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_EmitsItemsAndCompleted"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_EmitsItemsAndCompleted","Output":"=== RUN TestBuildOpenAICompactSSEPayload_EmitsItemsAndCompleted\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_EmitsItemsAndCompleted","Output":"--- PASS: TestBuildOpenAICompactSSEPayload_EmitsItemsAndCompleted (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_EmitsItemsAndCompleted","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_InjectsMissingResponseID"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_InjectsMissingResponseID","Output":"=== RUN TestBuildOpenAICompactSSEPayload_InjectsMissingResponseID\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_InjectsMissingResponseID","Output":"--- PASS: TestBuildOpenAICompactSSEPayload_InjectsMissingResponseID (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_InjectsMissingResponseID","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_DropsMalformedUsage"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_DropsMalformedUsage","Output":"=== RUN TestBuildOpenAICompactSSEPayload_DropsMalformedUsage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_DropsMalformedUsage","Output":"--- PASS: TestBuildOpenAICompactSSEPayload_DropsMalformedUsage (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_DropsMalformedUsage","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_KeepsWellFormedUsage"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_KeepsWellFormedUsage","Output":"=== RUN TestBuildOpenAICompactSSEPayload_KeepsWellFormedUsage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_KeepsWellFormedUsage","Output":"--- PASS: TestBuildOpenAICompactSSEPayload_KeepsWellFormedUsage (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_KeepsWellFormedUsage","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_RejectsNonJSONObject"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_RejectsNonJSONObject","Output":"=== RUN TestBuildOpenAICompactSSEPayload_RejectsNonJSONObject\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_RejectsNonJSONObject","Output":"--- PASS: TestBuildOpenAICompactSSEPayload_RejectsNonJSONObject (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_RejectsNonJSONObject","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAICompactSSEBridge_RequiresMarkAndSuccessStatus"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAICompactSSEBridge_RequiresMarkAndSuccessStatus","Output":"=== RUN TestWriteOpenAICompactSSEBridge_RequiresMarkAndSuccessStatus\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAICompactSSEBridge_RequiresMarkAndSuccessStatus","Output":"--- PASS: TestWriteOpenAICompactSSEBridge_RequiresMarkAndSuccessStatus (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAICompactSSEBridge_RequiresMarkAndSuccessStatus","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel","Output":"=== RUN TestNormalizeOpenAICompatRequestedModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel","Output":"=== PAUSE TestNormalizeOpenAICompatRequestedModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization","Output":"=== RUN TestApplyOpenAICompatModelNormalization\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization","Output":"=== PAUSE TestApplyOpenAICompatModelNormalization\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_DoesNotAutoDerivePromptCacheKeyForNonCodexModel"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_DoesNotAutoDerivePromptCacheKeyForNonCodexModel","Output":"=== RUN TestForwardAsAnthropic_DoesNotAutoDerivePromptCacheKeyForNonCodexModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_DoesNotAutoDerivePromptCacheKeyForNonCodexModel","Output":"=== PAUSE TestForwardAsAnthropic_DoesNotAutoDerivePromptCacheKeyForNonCodexModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_DoesNotAutoDerivePromptCacheKeyForNonCodexModel"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_TrimsFullReplayOnlyForCodexCompatModels"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_TrimsFullReplayOnlyForCodexCompatModels","Output":"=== RUN TestForwardAsAnthropic_TrimsFullReplayOnlyForCodexCompatModels\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_TrimsFullReplayOnlyForCodexCompatModels","Output":"=== PAUSE TestForwardAsAnthropic_TrimsFullReplayOnlyForCodexCompatModels\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_TrimsFullReplayOnlyForCodexCompatModels"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatPreviousResponseUnavailableRecognitionIsStrict"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatPreviousResponseUnavailableRecognitionIsStrict","Output":"=== RUN TestOpenAICompatPreviousResponseUnavailableRecognitionIsStrict\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatPreviousResponseUnavailableRecognitionIsStrict","Output":"=== PAUSE TestOpenAICompatPreviousResponseUnavailableRecognitionIsStrict\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatPreviousResponseUnavailableRecognitionIsStrict"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ReusesOAuthCodexTurnState"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ReusesOAuthCodexTurnState","Output":"=== RUN TestForwardAsAnthropic_ReusesOAuthCodexTurnState\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ReusesOAuthCodexTurnState","Output":"=== PAUSE TestForwardAsAnthropic_ReusesOAuthCodexTurnState\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ReusesOAuthCodexTurnState"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders","Output":"=== RUN TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/官方vscode身份"}
- {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/官方vscode身份","Output":"=== RUN TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/官方vscode身份\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4248896+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/官方vscode身份","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:31.424Z\",\"msg\":\"openai messages: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"original_model\":\"claude-sonnet-4-5\",\"normalized_model\":\"claude-sonnet-4-5\",\"billing_model\":\"gpt-5.4\",\"upstream_model\":\"gpt-5.4\",\"stream\":true,\"compat_prompt_cache_key_injected\":true,\"compat_prompt_cache_key_sha256\":\"27ab57cd52a79bd0\"}\n"}
- {"Time":"2026-09-12T11:38:31.4248896+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/官方vscode身份","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:31.424Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:31.4248896+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/官方vscode身份","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:31.424Z\",\"msg\":\"openai messages: upstream identity restored\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"upstream_model\":\"gpt-5.4\",\"compat_identity_restored\":true}\n"}
- {"Time":"2026-09-12T11:38:31.4248896+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/官方vscode身份","Output":"--- PASS: TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/官方vscode身份 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4248896+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/官方vscode身份","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4248896+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/TUI身份"}
- {"Time":"2026-09-12T11:38:31.4248896+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/TUI身份","Output":"=== RUN TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/TUI身份\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4248896+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/TUI身份","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:31.424Z\",\"msg\":\"openai messages: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"original_model\":\"claude-sonnet-4-5\",\"normalized_model\":\"claude-sonnet-4-5\",\"billing_model\":\"gpt-5.4\",\"upstream_model\":\"gpt-5.4\",\"stream\":true,\"compat_prompt_cache_key_injected\":true,\"compat_prompt_cache_key_sha256\":\"27ab57cd52a79bd0\"}\n"}
- {"Time":"2026-09-12T11:38:31.4248896+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/TUI身份","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:31.424Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:31.4248896+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/TUI身份","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:31.424Z\",\"msg\":\"openai messages: upstream identity restored\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"upstream_model\":\"gpt-5.4\",\"compat_identity_restored\":true}\n"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/TUI身份","Output":"--- PASS: TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/TUI身份 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/TUI身份","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/第三方UA"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/第三方UA","Output":"=== RUN TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/第三方UA\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/第三方UA","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:31.425Z\",\"msg\":\"openai messages: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"original_model\":\"claude-sonnet-4-5\",\"normalized_model\":\"claude-sonnet-4-5\",\"billing_model\":\"gpt-5.4\",\"upstream_model\":\"gpt-5.4\",\"stream\":true,\"compat_prompt_cache_key_injected\":true,\"compat_prompt_cache_key_sha256\":\"27ab57cd52a79bd0\"}\n"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/第三方UA","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:31.425Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/第三方UA","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:31.425Z\",\"msg\":\"openai messages: upstream identity restored\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"upstream_model\":\"gpt-5.4\",\"compat_identity_restored\":true}\n"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/第三方UA","Output":"--- PASS: TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/第三方UA (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/第三方UA","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders","Output":"--- PASS: TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplatePrependsRenderedInstructions"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplatePrependsRenderedInstructions","Output":"=== RUN TestForwardAsAnthropic_ForcedCodexInstructionsTemplatePrependsRenderedInstructions\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplatePrependsRenderedInstructions","Output":"=== PAUSE TestForwardAsAnthropic_ForcedCodexInstructionsTemplatePrependsRenderedInstructions\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplatePrependsRenderedInstructions"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplateUsesCachedTemplateContent"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplateUsesCachedTemplateContent","Output":"=== RUN TestForwardAsAnthropic_ForcedCodexInstructionsTemplateUsesCachedTemplateContent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplateUsesCachedTemplateContent","Output":"=== PAUSE TestForwardAsAnthropic_ForcedCodexInstructionsTemplateUsesCachedTemplateContent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplateUsesCachedTemplateContent"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_EmptyInputs"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_EmptyInputs","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_EmptyInputs\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_EmptyInputs","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_EmptyInputs (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_EmptyInputs","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ModelOnly"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ModelOnly","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_ModelOnly\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ModelOnly","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_ModelOnly (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ModelOnly","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_StableAcrossTurns"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_StableAcrossTurns","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_ChatCompletions_StableAcrossTurns\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_StableAcrossTurns","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_ChatCompletions_StableAcrossTurns (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_StableAcrossTurns","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_IgnoresLaterSystemMessages"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_IgnoresLaterSystemMessages","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_ChatCompletions_IgnoresLaterSystemMessages\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_IgnoresLaterSystemMessages","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_ChatCompletions_IgnoresLaterSystemMessages (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_IgnoresLaterSystemMessages","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_UsesLeadingSystemDeveloperPrefix"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_UsesLeadingSystemDeveloperPrefix","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_ChatCompletions_UsesLeadingSystemDeveloperPrefix\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_UsesLeadingSystemDeveloperPrefix","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_ChatCompletions_UsesLeadingSystemDeveloperPrefix (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_UsesLeadingSystemDeveloperPrefix","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_DifferentFirstUserDiffers"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_DifferentFirstUserDiffers","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_ChatCompletions_DifferentFirstUserDiffers\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_DifferentFirstUserDiffers","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_ChatCompletions_DifferentFirstUserDiffers (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_DifferentFirstUserDiffers","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_DifferentSystemDiffers"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_DifferentSystemDiffers","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_ChatCompletions_DifferentSystemDiffers\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_DifferentSystemDiffers","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_ChatCompletions_DifferentSystemDiffers (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_DifferentSystemDiffers","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_DifferentModelDiffers"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_DifferentModelDiffers","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_ChatCompletions_DifferentModelDiffers\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_DifferentModelDiffers","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_ChatCompletions_DifferentModelDiffers (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_DifferentModelDiffers","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_WithTools"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_WithTools","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_ChatCompletions_WithTools\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_WithTools","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_ChatCompletions_WithTools (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_WithTools","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_WithFunctions"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_WithFunctions","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_ChatCompletions_WithFunctions\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_WithFunctions","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_ChatCompletions_WithFunctions (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_WithFunctions","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_DeveloperRole"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_DeveloperRole","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_ChatCompletions_DeveloperRole\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_DeveloperRole","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_ChatCompletions_DeveloperRole (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_DeveloperRole","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_StructuredContent"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_StructuredContent","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_ChatCompletions_StructuredContent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_StructuredContent","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_ChatCompletions_StructuredContent (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_StructuredContent","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_InputString"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_InputString","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_ResponsesAPI_InputString\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_InputString","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_ResponsesAPI_InputString (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_InputString","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_InputArray"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_InputArray","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_ResponsesAPI_InputArray\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_InputArray","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_ResponsesAPI_InputArray (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_InputArray","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_WithInstructions"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_WithInstructions","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_ResponsesAPI_WithInstructions\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_WithInstructions","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_ResponsesAPI_WithInstructions (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_WithInstructions","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_Deterministic"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_Deterministic","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_Deterministic\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_Deterministic","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_Deterministic (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_Deterministic","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_PrefixPresent"}
- {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_PrefixPresent","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_PrefixPresent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_PrefixPresent","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_PrefixPresent (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_PrefixPresent","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_EmptyToolsIgnored"}
- {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_EmptyToolsIgnored","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_EmptyToolsIgnored\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_EmptyToolsIgnored","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_EmptyToolsIgnored (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_EmptyToolsIgnored","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_MessagesPreferredOverInput"}
- {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_MessagesPreferredOverInput","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_MessagesPreferredOverInput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_MessagesPreferredOverInput","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_MessagesPreferredOverInput (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_MessagesPreferredOverInput","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_JSONCanonicalisation"}
- {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_JSONCanonicalisation","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_JSONCanonicalisation\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_JSONCanonicalisation","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_JSONCanonicalisation (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_JSONCanonicalisation","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes"}
- {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/large_chat_completions"}
- {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/large_chat_completions","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/large_chat_completions\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4280672+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/large_chat_completions","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/large_chat_completions (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4280672+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/large_chat_completions","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4280672+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/large_responses"}
- {"Time":"2026-09-12T11:38:31.4280672+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/large_responses","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/large_responses\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/large_responses","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/large_responses (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/large_responses","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/fields_in_reverse_order"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/fields_in_reverse_order","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/fields_in_reverse_order\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/fields_in_reverse_order","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/fields_in_reverse_order (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/fields_in_reverse_order","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/missing_and_wrong_type_fields"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/missing_and_wrong_type_fields","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/missing_and_wrong_type_fields\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/missing_and_wrong_type_fields","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/missing_and_wrong_type_fields (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/missing_and_wrong_type_fields","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/duplicate_fields_keep_first_value"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/duplicate_fields_keep_first_value","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/duplicate_fields_keep_first_value\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/duplicate_fields_keep_first_value","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/duplicate_fields_keep_first_value (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/duplicate_fields_keep_first_value","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/escaped_field_names"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/escaped_field_names","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/escaped_field_names\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/escaped_field_names","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/escaped_field_names (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/escaped_field_names","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/trailing_object_fields_are_outside_the_root"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/trailing_object_fields_are_outside_the_root","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/trailing_object_fields_are_outside_the_root\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/trailing_object_fields_are_outside_the_root","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/trailing_object_fields_are_outside_the_root (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/trailing_object_fields_are_outside_the_root","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/trailing_quoted_fields_are_outside_the_root"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/trailing_quoted_fields_are_outside_the_root","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/trailing_quoted_fields_are_outside_the_root\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/trailing_quoted_fields_are_outside_the_root","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/trailing_quoted_fields_are_outside_the_root (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/trailing_quoted_fields_are_outside_the_root","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/leading_garbage_before_the_root"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/leading_garbage_before_the_root","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/leading_garbage_before_the_root\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/leading_garbage_before_the_root","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/leading_garbage_before_the_root (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/leading_garbage_before_the_root","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/escaped_braces_remain_inside_string_values"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/escaped_braces_remain_inside_string_values","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/escaped_braces_remain_inside_string_values\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/escaped_braces_remain_inside_string_values","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/escaped_braces_remain_inside_string_values (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/escaped_braces_remain_inside_string_values","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/nested_braces_do_not_end_the_root"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/nested_braces_do_not_end_the_root","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/nested_braces_do_not_end_the_root\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/nested_braces_do_not_end_the_root","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/nested_braces_do_not_end_the_root (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/nested_braces_do_not_end_the_root","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/root_array_does_not_expose_nested_or_trailing_object_fields"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/root_array_does_not_expose_nested_or_trailing_object_fields","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/root_array_does_not_expose_nested_or_trailing_object_fields\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/root_array_does_not_expose_nested_or_trailing_object_fields","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/root_array_does_not_expose_nested_or_trailing_object_fields (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/root_array_does_not_expose_nested_or_trailing_object_fields","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/trailing_messages_do_not_override_root_input"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/trailing_messages_do_not_override_root_input","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/trailing_messages_do_not_override_root_input\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/trailing_messages_do_not_override_root_input","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/trailing_messages_do_not_override_root_input (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/trailing_messages_do_not_override_root_input","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/truncated_string_containing_a_closing_brace"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/truncated_string_containing_a_closing_brace","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/truncated_string_containing_a_closing_brace\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/truncated_string_containing_a_closing_brace","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/truncated_string_containing_a_closing_brace (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/truncated_string_containing_a_closing_brace","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/lenient_truncated_body"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/lenient_truncated_body","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/lenient_truncated_body\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/lenient_truncated_body","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/lenient_truncated_body (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/lenient_truncated_body","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_AllTruncationOffsetsMatchLegacyBytes"}
- {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_AllTruncationOffsetsMatchLegacyBytes","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_AllTruncationOffsetsMatchLegacyBytes\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_AllTruncationOffsetsMatchLegacyBytes","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_AllTruncationOffsetsMatchLegacyBytes (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_AllTruncationOffsetsMatchLegacyBytes","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_InputTextTypedItem"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_InputTextTypedItem","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_ResponsesAPI_InputTextTypedItem\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_InputTextTypedItem","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_ResponsesAPI_InputTextTypedItem (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_InputTextTypedItem","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_TypedMessageItem"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_TypedMessageItem","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_ResponsesAPI_TypedMessageItem\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_TypedMessageItem","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_ResponsesAPI_TypedMessageItem (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_TypedMessageItem","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_IgnoresUserContent"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_IgnoresUserContent","Output":"=== RUN TestDeriveOpenAIStablePrefixSessionSeed_IgnoresUserContent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_IgnoresUserContent","Output":"--- PASS: TestDeriveOpenAIStablePrefixSessionSeed_IgnoresUserContent (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_IgnoresUserContent","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_IsolatesStablePrefixFields"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_IsolatesStablePrefixFields","Output":"=== RUN TestDeriveOpenAIStablePrefixSessionSeed_IsolatesStablePrefixFields\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_IsolatesStablePrefixFields","Output":"--- PASS: TestDeriveOpenAIStablePrefixSessionSeed_IsolatesStablePrefixFields (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_IsolatesStablePrefixFields","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_ChatSystemAndDeveloper"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_ChatSystemAndDeveloper","Output":"=== RUN TestDeriveOpenAIStablePrefixSessionSeed_ChatSystemAndDeveloper\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_ChatSystemAndDeveloper","Output":"--- PASS: TestDeriveOpenAIStablePrefixSessionSeed_ChatSystemAndDeveloper (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_ChatSystemAndDeveloper","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_EncodesSystemAndDeveloperRoles"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_EncodesSystemAndDeveloperRoles","Output":"=== RUN TestDeriveOpenAIStablePrefixSessionSeed_EncodesSystemAndDeveloperRoles\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_EncodesSystemAndDeveloperRoles","Output":"--- PASS: TestDeriveOpenAIStablePrefixSessionSeed_EncodesSystemAndDeveloperRoles (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_EncodesSystemAndDeveloperRoles","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_EncodesInstructionDelimiters"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_EncodesInstructionDelimiters","Output":"=== RUN TestDeriveOpenAIStablePrefixSessionSeed_EncodesInstructionDelimiters\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_EncodesInstructionDelimiters","Output":"--- PASS: TestDeriveOpenAIStablePrefixSessionSeed_EncodesInstructionDelimiters (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_EncodesInstructionDelimiters","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIAnchoredContentSessionSeed_RequiresMeaningfulAnchor"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIAnchoredContentSessionSeed_RequiresMeaningfulAnchor","Output":"=== RUN TestDeriveOpenAIAnchoredContentSessionSeed_RequiresMeaningfulAnchor\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIAnchoredContentSessionSeed_RequiresMeaningfulAnchor","Output":"--- PASS: TestDeriveOpenAIAnchoredContentSessionSeed_RequiresMeaningfulAnchor (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIAnchoredContentSessionSeed_RequiresMeaningfulAnchor","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_RequiresMeaningfulPrefix"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_RequiresMeaningfulPrefix","Output":"=== RUN TestDeriveOpenAIStablePrefixSessionSeed_RequiresMeaningfulPrefix\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_RequiresMeaningfulPrefix","Output":"--- PASS: TestDeriveOpenAIStablePrefixSessionSeed_RequiresMeaningfulPrefix (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_RequiresMeaningfulPrefix","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy","Output":"=== RUN TestDetectOpenAICyberPolicy\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/top-level_error"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/top-level_error","Output":"=== RUN TestDetectOpenAICyberPolicy/top-level_error\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/top-level_error","Output":"--- PASS: TestDetectOpenAICyberPolicy/top-level_error (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/top-level_error","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/response-wrapped"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/response-wrapped","Output":"=== RUN TestDetectOpenAICyberPolicy/response-wrapped\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/response-wrapped","Output":"--- PASS: TestDetectOpenAICyberPolicy/response-wrapped (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/response-wrapped","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/case-insensitive"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/case-insensitive","Output":"=== RUN TestDetectOpenAICyberPolicy/case-insensitive\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/case-insensitive","Output":"--- PASS: TestDetectOpenAICyberPolicy/case-insensitive (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/case-insensitive","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/content_policy_not_cyber"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/content_policy_not_cyber","Output":"=== RUN TestDetectOpenAICyberPolicy/content_policy_not_cyber\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/content_policy_not_cyber","Output":"--- PASS: TestDetectOpenAICyberPolicy/content_policy_not_cyber (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/content_policy_not_cyber","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/safety_message_not_cyber"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/safety_message_not_cyber","Output":"=== RUN TestDetectOpenAICyberPolicy/safety_message_not_cyber\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/safety_message_not_cyber","Output":"--- PASS: TestDetectOpenAICyberPolicy/safety_message_not_cyber (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/safety_message_not_cyber","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/empty"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/empty","Output":"=== RUN TestDetectOpenAICyberPolicy/empty\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/empty","Output":"--- PASS: TestDetectOpenAICyberPolicy/empty (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/empty","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/upstream_error"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/upstream_error","Output":"=== RUN TestDetectOpenAICyberPolicy/upstream_error\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/upstream_error","Output":"--- PASS: TestDetectOpenAICyberPolicy/upstream_error (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/upstream_error","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy","Output":"--- PASS: TestDetectOpenAICyberPolicy (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL","Output":"=== RUN TestBuildOpenAIEmbeddingsURL\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL","Output":"=== PAUSE TestBuildOpenAIEmbeddingsURL\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIEncryptedContentDigestsRaw"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIEncryptedContentDigestsRaw","Output":"=== RUN TestCollectOpenAIEncryptedContentDigestsRaw\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIEncryptedContentDigestsRaw","Output":"=== PAUSE TestCollectOpenAIEncryptedContentDigestsRaw\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIEncryptedContentDigestsRaw"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems","Output":"=== RUN TestStripOpenAIInvalidEncryptedContentItems\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems","Output":"=== PAUSE TestStripOpenAIInvalidEncryptedContentItems\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems","Output":"=== RUN TestStripOpenAIInvalidEncryptedContentFromReplayItems\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems","Output":"=== PAUSE TestStripOpenAIInvalidEncryptedContentFromReplayItems\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentRaw"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentRaw","Output":"=== RUN TestStripOpenAIInvalidEncryptedContentRaw\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentRaw","Output":"=== PAUSE TestStripOpenAIInvalidEncryptedContentRaw\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentRaw"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage","Output":"=== RUN TestOpenAIWSStateStoreInvalidEncryptedContentLineage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage","Output":"=== PAUSE TestOpenAIWSStateStoreInvalidEncryptedContentLineage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents","Output":"=== RUN TestBuildOpenAIEndpointURLPreservesURLComponents\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/root"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/root","Output":"=== RUN TestBuildOpenAIEndpointURLPreservesURLComponents/root\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/root","Output":"--- PASS: TestBuildOpenAIEndpointURLPreservesURLComponents/root (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/root","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/v1"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/v1","Output":"=== RUN TestBuildOpenAIEndpointURLPreservesURLComponents/v1\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/v1","Output":"--- PASS: TestBuildOpenAIEndpointURLPreservesURLComponents/v1 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/v1","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/prefix"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/prefix","Output":"=== RUN TestBuildOpenAIEndpointURLPreservesURLComponents/prefix\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/prefix","Output":"--- PASS: TestBuildOpenAIEndpointURLPreservesURLComponents/prefix (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/prefix","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/version"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/version","Output":"=== RUN TestBuildOpenAIEndpointURLPreservesURLComponents/version\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/version","Output":"--- PASS: TestBuildOpenAIEndpointURLPreservesURLComponents/version (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/version","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/query"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/query","Output":"=== RUN TestBuildOpenAIEndpointURLPreservesURLComponents/query\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/query","Output":"--- PASS: TestBuildOpenAIEndpointURLPreservesURLComponents/query (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/query","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/fragment_is_removed"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/fragment_is_removed","Output":"=== RUN TestBuildOpenAIEndpointURLPreservesURLComponents/fragment_is_removed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/fragment_is_removed","Output":"--- PASS: TestBuildOpenAIEndpointURLPreservesURLComponents/fragment_is_removed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/fragment_is_removed","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/ipv6"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/ipv6","Output":"=== RUN TestBuildOpenAIEndpointURLPreservesURLComponents/ipv6\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/ipv6","Output":"--- PASS: TestBuildOpenAIEndpointURLPreservesURLComponents/ipv6 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/ipv6","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/already_complete"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/already_complete","Output":"=== RUN TestBuildOpenAIEndpointURLPreservesURLComponents/already_complete\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/already_complete","Output":"--- PASS: TestBuildOpenAIEndpointURLPreservesURLComponents/already_complete (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/already_complete","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents","Output":"--- PASS: TestBuildOpenAIEndpointURLPreservesURLComponents (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount","Output":"=== RUN TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/both_accounts_have_mapping"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/both_accounts_have_mapping","Output":"=== RUN TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/both_accounts_have_mapping\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/both_accounts_have_mapping","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:31.433Z\",\"msg\":\"[OpenAI] Model mapping applied: alias-model -\u003e base-model-a (account: account-a, isCodexCLI: false)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/both_accounts_have_mapping","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:31.433Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"base-model-a\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/both_accounts_have_mapping","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:31.433Z\",\"msg\":\"[OpenAI] Model mapping applied: alias-model -\u003e base-model-b (account: account-b, isCodexCLI: false)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/both_accounts_have_mapping","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:31.433Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":2,\"final_model\":\"base-model-b\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/both_accounts_have_mapping","Output":"--- PASS: TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/both_accounts_have_mapping (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/both_accounts_have_mapping","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/first_account_has_mapping_second_account_has_none"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/first_account_has_mapping_second_account_has_none","Output":"=== RUN TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/first_account_has_mapping_second_account_has_none\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/first_account_has_mapping_second_account_has_none","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:31.433Z\",\"msg\":\"[OpenAI] Model mapping applied: gpt-5.4-high -\u003e gpt-5.4 (account: account-a, isCodexCLI: false)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/first_account_has_mapping_second_account_has_none","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:31.433Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/first_account_has_mapping_second_account_has_none","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:31.433Z\",\"msg\":\"[OpenAI] Upstream model resolved: gpt-5.4-high -\u003e gpt-5.4 (account: account-b, type: oauth, isCodexCLI: false)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/first_account_has_mapping_second_account_has_none","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:31.433Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":2,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/first_account_has_mapping_second_account_has_none","Output":"--- PASS: TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/first_account_has_mapping_second_account_has_none (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/first_account_has_mapping_second_account_has_none","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/first_account_has_no_mapping_second_account_has_mapping"}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/first_account_has_no_mapping_second_account_has_mapping","Output":"=== RUN TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/first_account_has_no_mapping_second_account_has_mapping\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/first_account_has_no_mapping_second_account_has_mapping","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:31.433Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"alias-model\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/first_account_has_no_mapping_second_account_has_mapping","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:31.433Z\",\"msg\":\"[OpenAI] Model mapping applied: alias-model -\u003e base-model-b (account: account-b, isCodexCLI: false)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/first_account_has_no_mapping_second_account_has_mapping","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:31.433Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":2,\"final_model\":\"base-model-b\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/first_account_has_no_mapping_second_account_has_mapping","Output":"--- PASS: TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/first_account_has_no_mapping_second_account_has_mapping (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/first_account_has_no_mapping_second_account_has_mapping","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/legacy_context_cache_is_ignored_when_mappings_differ"}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/legacy_context_cache_is_ignored_when_mappings_differ","Output":"=== RUN TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/legacy_context_cache_is_ignored_when_mappings_differ\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/legacy_context_cache_is_ignored_when_mappings_differ","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:31.433Z\",\"msg\":\"[OpenAI] Model mapping applied: alias-model -\u003e base-model-a (account: account-a, isCodexCLI: false)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/legacy_context_cache_is_ignored_when_mappings_differ","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:31.433Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"base-model-a\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/legacy_context_cache_is_ignored_when_mappings_differ","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:31.433Z\",\"msg\":\"[OpenAI] Model mapping applied: alias-model -\u003e base-model-b (account: account-b, isCodexCLI: false)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/legacy_context_cache_is_ignored_when_mappings_differ","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:31.433Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":2,\"final_model\":\"base-model-b\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/legacy_context_cache_is_ignored_when_mappings_differ","Output":"--- PASS: TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/legacy_context_cache_is_ignored_when_mappings_differ (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/legacy_context_cache_is_ignored_when_mappings_differ","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount","Output":"--- PASS: TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_HandleFailoverSideEffects_DoesNotRereadResponseBody"}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_HandleFailoverSideEffects_DoesNotRereadResponseBody","Output":"=== RUN TestOpenAIGatewayService_HandleFailoverSideEffects_DoesNotRereadResponseBody\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_HandleFailoverSideEffects_DoesNotRereadResponseBody","Output":"--- PASS: TestOpenAIGatewayService_HandleFailoverSideEffects_DoesNotRereadResponseBody (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_HandleFailoverSideEffects_DoesNotRereadResponseBody","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIRequestBodyMap_IgnoresLegacyContextCache"}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIRequestBodyMap_IgnoresLegacyContextCache","Output":"=== RUN TestGetOpenAIRequestBodyMap_IgnoresLegacyContextCache\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIRequestBodyMap_IgnoresLegacyContextCache","Output":"--- PASS: TestGetOpenAIRequestBodyMap_IgnoresLegacyContextCache (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIRequestBodyMap_IgnoresLegacyContextCache","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEvaluateOpenAIFastPolicy_DefaultPassesKnownTiers"}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEvaluateOpenAIFastPolicy_DefaultPassesKnownTiers","Output":"=== RUN TestEvaluateOpenAIFastPolicy_DefaultPassesKnownTiers\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEvaluateOpenAIFastPolicy_DefaultPassesKnownTiers","Output":"--- PASS: TestEvaluateOpenAIFastPolicy_DefaultPassesKnownTiers (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEvaluateOpenAIFastPolicy_DefaultPassesKnownTiers","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEvaluateOpenAIFastPolicy_BlockRuleCarriesMessage"}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEvaluateOpenAIFastPolicy_BlockRuleCarriesMessage","Output":"=== RUN TestEvaluateOpenAIFastPolicy_BlockRuleCarriesMessage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEvaluateOpenAIFastPolicy_BlockRuleCarriesMessage","Output":"--- PASS: TestEvaluateOpenAIFastPolicy_BlockRuleCarriesMessage (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEvaluateOpenAIFastPolicy_BlockRuleCarriesMessage","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEvaluateOpenAIFastPolicy_ScopeFiltersOAuth"}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEvaluateOpenAIFastPolicy_ScopeFiltersOAuth","Output":"=== RUN TestEvaluateOpenAIFastPolicy_ScopeFiltersOAuth\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEvaluateOpenAIFastPolicy_ScopeFiltersOAuth","Output":"--- PASS: TestEvaluateOpenAIFastPolicy_ScopeFiltersOAuth (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEvaluateOpenAIFastPolicy_ScopeFiltersOAuth","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEvaluateOpenAIFastPolicy_UserScopedRuleOverridesGlobalRule"}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEvaluateOpenAIFastPolicy_UserScopedRuleOverridesGlobalRule","Output":"=== RUN TestEvaluateOpenAIFastPolicy_UserScopedRuleOverridesGlobalRule\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEvaluateOpenAIFastPolicy_UserScopedRuleOverridesGlobalRule","Output":"--- PASS: TestEvaluateOpenAIFastPolicy_UserScopedRuleOverridesGlobalRule (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEvaluateOpenAIFastPolicy_UserScopedRuleOverridesGlobalRule","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_DefaultPassesPriorityAndFast"}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_DefaultPassesPriorityAndFast","Output":"=== RUN TestApplyOpenAIFastPolicyToBody_DefaultPassesPriorityAndFast\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_DefaultPassesPriorityAndFast","Output":"--- PASS: TestApplyOpenAIFastPolicyToBody_DefaultPassesPriorityAndFast (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_DefaultPassesPriorityAndFast","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_ExplicitFilterRemovesField"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_ExplicitFilterRemovesField","Output":"=== RUN TestApplyOpenAIFastPolicyToBody_ExplicitFilterRemovesField\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_ExplicitFilterRemovesField","Output":"--- PASS: TestApplyOpenAIFastPolicyToBody_ExplicitFilterRemovesField (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_ExplicitFilterRemovesField","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_UserScopedRuleOverridesGlobalRule"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_UserScopedRuleOverridesGlobalRule","Output":"=== RUN TestApplyOpenAIFastPolicyToBody_UserScopedRuleOverridesGlobalRule\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_UserScopedRuleOverridesGlobalRule","Output":"--- PASS: TestApplyOpenAIFastPolicyToBody_UserScopedRuleOverridesGlobalRule (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_UserScopedRuleOverridesGlobalRule","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_PriorityFilterLeavesUltrafast"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_PriorityFilterLeavesUltrafast","Output":"=== RUN TestApplyOpenAIFastPolicyToBody_PriorityFilterLeavesUltrafast\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_PriorityFilterLeavesUltrafast","Output":"--- PASS: TestApplyOpenAIFastPolicyToBody_PriorityFilterLeavesUltrafast (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_PriorityFilterLeavesUltrafast","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_ForcePriorityRewritesKnownTier"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_ForcePriorityRewritesKnownTier","Output":"=== RUN TestApplyOpenAIFastPolicyToBody_ForcePriorityRewritesKnownTier\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_ForcePriorityRewritesKnownTier","Output":"--- PASS: TestApplyOpenAIFastPolicyToBody_ForcePriorityRewritesKnownTier (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_ForcePriorityRewritesKnownTier","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceInjectsAndOverridesTier"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceInjectsAndOverridesTier","Output":"=== RUN TestApplyOpenAIFastPolicyToBody_GroupForceInjectsAndOverridesTier\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceInjectsAndOverridesTier","Output":"--- PASS: TestApplyOpenAIFastPolicyToBody_GroupForceInjectsAndOverridesTier (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceInjectsAndOverridesTier","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceStillHonorsGlobalPolicy"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceStillHonorsGlobalPolicy","Output":"=== RUN TestApplyOpenAIFastPolicyToBody_GroupForceStillHonorsGlobalPolicy\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceStillHonorsGlobalPolicy","Output":"--- PASS: TestApplyOpenAIFastPolicyToBody_GroupForceStillHonorsGlobalPolicy (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceStillHonorsGlobalPolicy","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceRequiresHydratedGroup"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceRequiresHydratedGroup","Output":"=== RUN TestApplyOpenAIFastPolicyToBody_GroupForceRequiresHydratedGroup\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceRequiresHydratedGroup","Output":"--- PASS: TestApplyOpenAIFastPolicyToBody_GroupForceRequiresHydratedGroup (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceRequiresHydratedGroup","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceOnlyTargetsOpenAIAccounts"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceOnlyTargetsOpenAIAccounts","Output":"=== RUN TestApplyOpenAIFastPolicyToBody_GroupForceOnlyTargetsOpenAIAccounts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceOnlyTargetsOpenAIAccounts","Output":"--- PASS: TestApplyOpenAIFastPolicyToBody_GroupForceOnlyTargetsOpenAIAccounts (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceOnlyTargetsOpenAIAccounts","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceRequiresSupportedGroupPlatform"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceRequiresSupportedGroupPlatform","Output":"=== RUN TestApplyOpenAIFastPolicyToBody_GroupForceRequiresSupportedGroupPlatform\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceRequiresSupportedGroupPlatform","Output":"--- PASS: TestApplyOpenAIFastPolicyToBody_GroupForceRequiresSupportedGroupPlatform (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceRequiresSupportedGroupPlatform","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_OfficialTiersBypassDefaultRule"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_OfficialTiersBypassDefaultRule","Output":"=== RUN TestApplyOpenAIFastPolicyToBody_OfficialTiersBypassDefaultRule\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_OfficialTiersBypassDefaultRule","Output":"--- PASS: TestApplyOpenAIFastPolicyToBody_OfficialTiersBypassDefaultRule (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_OfficialTiersBypassDefaultRule","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_AllRuleStripsOfficialTiers"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_AllRuleStripsOfficialTiers","Output":"=== RUN TestApplyOpenAIFastPolicyToBody_AllRuleStripsOfficialTiers\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_AllRuleStripsOfficialTiers","Output":"--- PASS: TestApplyOpenAIFastPolicyToBody_AllRuleStripsOfficialTiers (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_AllRuleStripsOfficialTiers","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_UnknownTierStripped"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_UnknownTierStripped","Output":"=== RUN TestApplyOpenAIFastPolicyToBody_UnknownTierStripped\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_UnknownTierStripped","Output":"--- PASS: TestApplyOpenAIFastPolicyToBody_UnknownTierStripped (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_UnknownTierStripped","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_BlockReturnsTypedError"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_BlockReturnsTypedError","Output":"=== RUN TestApplyOpenAIFastPolicyToBody_BlockReturnsTypedError\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_BlockReturnsTypedError","Output":"--- PASS: TestApplyOpenAIFastPolicyToBody_BlockReturnsTypedError (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_BlockReturnsTypedError","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIFastPolicySettings_Validation"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIFastPolicySettings_Validation","Output":"=== RUN TestSetOpenAIFastPolicySettings_Validation\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIFastPolicySettings_Validation","Output":"--- PASS: TestSetOpenAIFastPolicySettings_Validation (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIFastPolicySettings_Validation","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIFastPolicyBlockedWSEvent_HasEventIDAndCode"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIFastPolicyBlockedWSEvent_HasEventIDAndCode","Output":"=== RUN TestBuildOpenAIFastPolicyBlockedWSEvent_HasEventIDAndCode\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIFastPolicyBlockedWSEvent_HasEventIDAndCode","Output":"--- PASS: TestBuildOpenAIFastPolicyBlockedWSEvent_HasEventIDAndCode (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIFastPolicyBlockedWSEvent_HasEventIDAndCode","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIFastPolicyBlockedWSEvent_NilSafe"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIFastPolicyBlockedWSEvent_NilSafe","Output":"=== RUN TestBuildOpenAIFastPolicyBlockedWSEvent_NilSafe\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIFastPolicyBlockedWSEvent_NilSafe","Output":"--- PASS: TestBuildOpenAIFastPolicyBlockedWSEvent_NilSafe (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIFastPolicyBlockedWSEvent_NilSafe","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughPolicyModelDoesNotApplyAccountMapping"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughPolicyModelDoesNotApplyAccountMapping","Output":"=== RUN TestOpenAIWSPassthroughPolicyModelDoesNotApplyAccountMapping\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughPolicyModelDoesNotApplyAccountMapping","Output":"--- PASS: TestOpenAIWSPassthroughPolicyModelDoesNotApplyAccountMapping (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughPolicyModelDoesNotApplyAccountMapping","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_BlockShortCircuitsUpstream"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_BlockShortCircuitsUpstream","Output":"=== RUN TestApplyOpenAIFastPolicyToBody_BlockShortCircuitsUpstream\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_BlockShortCircuitsUpstream","Output":"--- PASS: TestApplyOpenAIFastPolicyToBody_BlockShortCircuitsUpstream (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_BlockShortCircuitsUpstream","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropicMessages_BetaFastModePassesOpenAIFastPolicyByDefault"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropicMessages_BetaFastModePassesOpenAIFastPolicyByDefault","Output":"=== RUN TestForwardAsAnthropicMessages_BetaFastModePassesOpenAIFastPolicyByDefault\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropicMessages_BetaFastModePassesOpenAIFastPolicyByDefault","Output":"--- PASS: TestForwardAsAnthropicMessages_BetaFastModePassesOpenAIFastPolicyByDefault (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropicMessages_BetaFastModePassesOpenAIFastPolicyByDefault","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_PassNormalizesFastAlias"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_PassNormalizesFastAlias","Output":"=== RUN TestApplyOpenAIFastPolicyToBody_PassNormalizesFastAlias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_PassNormalizesFastAlias","Output":"--- PASS: TestApplyOpenAIFastPolicyToBody_PassNormalizesFastAlias (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_PassNormalizesFastAlias","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_NonStringServiceTier"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_NonStringServiceTier","Output":"=== RUN TestApplyOpenAIFastPolicyToBody_NonStringServiceTier\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_NonStringServiceTier","Output":"--- PASS: TestApplyOpenAIFastPolicyToBody_NonStringServiceTier (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_NonStringServiceTier","Elapsed":0}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField","Output":"=== RUN TestValidateOpenAIServiceTierField\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField","Output":"=== PAUSE TestValidateOpenAIServiceTierField\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios","Output":"=== RUN TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios","Output":"=== PAUSE TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x","Output":"=== PAUSE TestOpenAIFastBillingMultiplier_2xAnd25x\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x"}
- {"Time":"2026-09-12T11:38:31.4348251+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBilling_FastMultiplierOverridesEnforcedRatio"}
- {"Time":"2026-09-12T11:38:31.4348251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBilling_FastMultiplierOverridesEnforcedRatio","Output":"=== RUN TestOpenAIFastBilling_FastMultiplierOverridesEnforcedRatio\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4348251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBilling_FastMultiplierOverridesEnforcedRatio","Output":"=== PAUSE TestOpenAIFastBilling_FastMultiplierOverridesEnforcedRatio\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4348251+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBilling_FastMultiplierOverridesEnforcedRatio"}
- {"Time":"2026-09-12T11:38:31.4348251+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier"}
- {"Time":"2026-09-12T11:38:31.4348251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier","Output":"=== RUN TestResolvedOpenAIUpstreamServiceTier\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4348251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier","Output":"=== PAUSE TestResolvedOpenAIUpstreamServiceTier\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4348251+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier"}
- {"Time":"2026-09-12T11:38:31.4348251+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardFirstOutputTimeoutIncludesResponseHeaderWait"}
- {"Time":"2026-09-12T11:38:31.4348251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardFirstOutputTimeoutIncludesResponseHeaderWait","Output":"=== RUN TestOpenAIForwardFirstOutputTimeoutIncludesResponseHeaderWait\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:31.4353446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardFirstOutputTimeoutIncludesResponseHeaderWait","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:31.435Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:32.434911+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardFirstOutputTimeoutIncludesResponseHeaderWait","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:32.434Z\",\"msg\":\"OpenAI first output timeout: account=1 model=gpt-5.5 effort=low phase=response_headers elapsed=1.0000859s limit=1s\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:32.434911+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardFirstOutputTimeoutIncludesResponseHeaderWait","Output":"--- PASS: TestOpenAIForwardFirstOutputTimeoutIncludesResponseHeaderWait (1.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:32.434911+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardFirstOutputTimeoutIncludesResponseHeaderWait","Elapsed":1}
- {"Time":"2026-09-12T11:38:32.434911+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDisabledPreservesSynchronousStream"}
- {"Time":"2026-09-12T11:38:32.434911+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDisabledPreservesSynchronousStream","Output":"=== RUN TestOpenAINativeFirstOutputTimeoutDisabledPreservesSynchronousStream\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:32.434911+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDisabledPreservesSynchronousStream","Output":"--- PASS: TestOpenAINativeFirstOutputTimeoutDisabledPreservesSynchronousStream (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:32.434911+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDisabledPreservesSynchronousStream","Elapsed":0}
- {"Time":"2026-09-12T11:38:32.434911+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutIgnoresPreambleAndCleansReader"}
- {"Time":"2026-09-12T11:38:32.434911+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutIgnoresPreambleAndCleansReader","Output":"=== RUN TestOpenAINativeFirstOutputTimeoutIgnoresPreambleAndCleansReader\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:32.4355101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutIgnoresPreambleAndCleansReader","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:32.435Z\",\"msg\":\"OpenAI first output timeout: account=1 model=model effort= phase=semantic_output elapsed=2.0005991s limit=1s\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutIgnoresPreambleAndCleansReader","Output":"--- PASS: TestOpenAINativeFirstOutputTimeoutIgnoresPreambleAndCleansReader (0.20s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutIgnoresPreambleAndCleansReader","Elapsed":0.2}
- {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewOpenAIFirstOutputTimeoutErrorRecordsCallerProxyAttribution"}
- {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewOpenAIFirstOutputTimeoutErrorRecordsCallerProxyAttribution","Output":"=== RUN TestNewOpenAIFirstOutputTimeoutErrorRecordsCallerProxyAttribution\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewOpenAIFirstOutputTimeoutErrorRecordsCallerProxyAttribution","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:32.635Z\",\"msg\":\"OpenAI first output timeout: account=2 model=gpt-5.5 effort= phase=websocket_first_semantic_output elapsed=0s limit=1s\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewOpenAIFirstOutputTimeoutErrorRecordsCallerProxyAttribution","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:32.635Z\",\"msg\":\"OpenAI first output timeout: account=1 model=gpt-5.5 effort= phase=semantic_output elapsed=0s limit=1s\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewOpenAIFirstOutputTimeoutErrorRecordsCallerProxyAttribution","Output":"--- PASS: TestNewOpenAIFirstOutputTimeoutErrorRecordsCallerProxyAttribution (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewOpenAIFirstOutputTimeoutErrorRecordsCallerProxyAttribution","Elapsed":0}
- {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputTimeoutForReasoningEffort"}
- {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputTimeoutForReasoningEffort","Output":"=== RUN TestOpenAIFirstOutputTimeoutForReasoningEffort\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputTimeoutForReasoningEffort","Output":"--- PASS: TestOpenAIFirstOutputTimeoutForReasoningEffort (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputTimeoutForReasoningEffort","Elapsed":0}
- {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputStageDefaultLimitIsIndependentFromScannerLimit"}
- {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputStageDefaultLimitIsIndependentFromScannerLimit","Output":"=== RUN TestOpenAIFirstOutputStageDefaultLimitIsIndependentFromScannerLimit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputStageDefaultLimitIsIndependentFromScannerLimit","Output":"--- PASS: TestOpenAIFirstOutputStageDefaultLimitIsIndependentFromScannerLimit (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputStageDefaultLimitIsIndependentFromScannerLimit","Elapsed":0}
- {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputEventQueueSizeBackpressuresGuardedStreams"}
- {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputEventQueueSizeBackpressuresGuardedStreams","Output":"=== RUN TestOpenAIFirstOutputEventQueueSizeBackpressuresGuardedStreams\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputEventQueueSizeBackpressuresGuardedStreams","Output":"--- PASS: TestOpenAIFirstOutputEventQueueSizeBackpressuresGuardedStreams (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputEventQueueSizeBackpressuresGuardedStreams","Elapsed":0}
- {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputDynamicScannerLimitsOnlyWhileGuardIsActive"}
- {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputDynamicScannerLimitsOnlyWhileGuardIsActive","Output":"=== RUN TestOpenAIFirstOutputDynamicScannerLimitsOnlyWhileGuardIsActive\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:32.6361485+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputDynamicScannerLimitsOnlyWhileGuardIsActive","Output":"--- PASS: TestOpenAIFirstOutputDynamicScannerLimitsOnlyWhileGuardIsActive (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:32.6361485+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputDynamicScannerLimitsOnlyWhileGuardIsActive","Elapsed":0}
- {"Time":"2026-09-12T11:38:32.6361485+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputStageOverflowIsAtomicAndCleanupRemovesSpool"}
- {"Time":"2026-09-12T11:38:32.6361485+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputStageOverflowIsAtomicAndCleanupRemovesSpool","Output":"=== RUN TestOpenAIFirstOutputStageOverflowIsAtomicAndCleanupRemovesSpool\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:32.6361485+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputStageOverflowIsAtomicAndCleanupRemovesSpool","Output":"--- PASS: TestOpenAIFirstOutputStageOverflowIsAtomicAndCleanupRemovesSpool (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:32.6361485+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputStageOverflowIsAtomicAndCleanupRemovesSpool","Elapsed":0}
- {"Time":"2026-09-12T11:38:32.6361485+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputStageCommitCopiesSpoolAndRemovesTemp"}
- {"Time":"2026-09-12T11:38:32.6361485+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputStageCommitCopiesSpoolAndRemovesTemp","Output":"=== RUN TestOpenAIFirstOutputStageCommitCopiesSpoolAndRemovesTemp\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:32.6361485+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputStageCommitCopiesSpoolAndRemovesTemp","Output":"--- PASS: TestOpenAIFirstOutputStageCommitCopiesSpoolAndRemovesTemp (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:32.6361485+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputStageCommitCopiesSpoolAndRemovesTemp","Elapsed":0}
- {"Time":"2026-09-12T11:38:32.6361485+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputStageUnlinkFailurePermanentlyFallsBackToMemoryAndRetriesCleanup"}
- {"Time":"2026-09-12T11:38:32.6361485+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputStageUnlinkFailurePermanentlyFallsBackToMemoryAndRetriesCleanup","Output":"=== RUN TestOpenAIFirstOutputStageUnlinkFailurePermanentlyFallsBackToMemoryAndRetriesCleanup\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:32.6371649+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputStageUnlinkFailurePermanentlyFallsBackToMemoryAndRetriesCleanup","Output":"--- PASS: TestOpenAIFirstOutputStageUnlinkFailurePermanentlyFallsBackToMemoryAndRetriesCleanup (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:32.6371649+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputStageUnlinkFailurePermanentlyFallsBackToMemoryAndRetriesCleanup","Elapsed":0}
- {"Time":"2026-09-12T11:38:32.6371649+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDisarmsAfterSemanticOutput"}
- {"Time":"2026-09-12T11:38:32.6371649+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDisarmsAfterSemanticOutput","Output":"=== RUN TestOpenAINativeFirstOutputTimeoutDisarmsAfterSemanticOutput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7369133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDisarmsAfterSemanticOutput","Output":"--- PASS: TestOpenAINativeFirstOutputTimeoutDisarmsAfterSemanticOutput (1.10s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7369133+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDisarmsAfterSemanticOutput","Elapsed":1.1}
- {"Time":"2026-09-12T11:38:33.7369133+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutWaitsForCompleteSemanticEvent"}
- {"Time":"2026-09-12T11:38:33.7369133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutWaitsForCompleteSemanticEvent","Output":"=== RUN TestOpenAINativeFirstOutputTimeoutWaitsForCompleteSemanticEvent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7659677+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateEnsuresCodexFingerprintSeedWithPerRowSQL"}
- {"Time":"2026-09-12T11:38:33.7659677+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateEnsuresCodexFingerprintSeedWithPerRowSQL","Output":"=== RUN TestBulkUpdateEnsuresCodexFingerprintSeedWithPerRowSQL\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7659677+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateEnsuresCodexFingerprintSeedWithPerRowSQL","Output":"--- PASS: TestBulkUpdateEnsuresCodexFingerprintSeedWithPerRowSQL (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7659677+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateEnsuresCodexFingerprintSeedWithPerRowSQL","Elapsed":0}
- {"Time":"2026-09-12T11:38:33.7659677+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestUpdateExtraEnsuresCodexFingerprintSeedAtomicallyWhenEnabling"}
- {"Time":"2026-09-12T11:38:33.7659677+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestUpdateExtraEnsuresCodexFingerprintSeedAtomicallyWhenEnabling","Output":"=== RUN TestUpdateExtraEnsuresCodexFingerprintSeedAtomicallyWhenEnabling\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7659677+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestUpdateExtraEnsuresCodexFingerprintSeedAtomicallyWhenEnabling","Output":"--- PASS: TestUpdateExtraEnsuresCodexFingerprintSeedAtomicallyWhenEnabling (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7659677+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestUpdateExtraEnsuresCodexFingerprintSeedAtomicallyWhenEnabling","Elapsed":0}
- {"Time":"2026-09-12T11:38:33.7659677+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateCodexFingerprintSeedRollsBackWhenUpdateFails"}
- {"Time":"2026-09-12T11:38:33.7659677+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateCodexFingerprintSeedRollsBackWhenUpdateFails","Output":"=== RUN TestBulkUpdateCodexFingerprintSeedRollsBackWhenUpdateFails\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7659677+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateCodexFingerprintSeedRollsBackWhenUpdateFails","Output":"--- PASS: TestBulkUpdateCodexFingerprintSeedRollsBackWhenUpdateFails (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7664925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateCodexFingerprintSeedRollsBackWhenUpdateFails","Elapsed":0}
- {"Time":"2026-09-12T11:38:33.7664925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateCodexFingerprintSeedRollsBackWhenOutboxFails"}
- {"Time":"2026-09-12T11:38:33.7664925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateCodexFingerprintSeedRollsBackWhenOutboxFails","Output":"=== RUN TestBulkUpdateCodexFingerprintSeedRollsBackWhenOutboxFails\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7664925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateCodexFingerprintSeedRollsBackWhenOutboxFails","Output":"--- PASS: TestBulkUpdateCodexFingerprintSeedRollsBackWhenOutboxFails (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7664925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateCodexFingerprintSeedRollsBackWhenOutboxFails","Elapsed":0}
- {"Time":"2026-09-12T11:38:33.7664925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestShouldEnqueueSchedulerOutboxForExtraUpdates_OpenAIResponsesCapabilityKeysAreRelevant"}
- {"Time":"2026-09-12T11:38:33.7664925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestShouldEnqueueSchedulerOutboxForExtraUpdates_OpenAIResponsesCapabilityKeysAreRelevant","Output":"=== RUN TestShouldEnqueueSchedulerOutboxForExtraUpdates_OpenAIResponsesCapabilityKeysAreRelevant\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7664925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestShouldEnqueueSchedulerOutboxForExtraUpdates_OpenAIResponsesCapabilityKeysAreRelevant","Output":"--- PASS: TestShouldEnqueueSchedulerOutboxForExtraUpdates_OpenAIResponsesCapabilityKeysAreRelevant (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7664925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestShouldEnqueueSchedulerOutboxForExtraUpdates_OpenAIResponsesCapabilityKeysAreRelevant","Elapsed":0}
- {"Time":"2026-09-12T11:38:33.7664925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestUpdateCredentialsAtomicallyClearsProbeForOpenAIAPIKeyIdentityChange"}
- {"Time":"2026-09-12T11:38:33.7664925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestUpdateCredentialsAtomicallyClearsProbeForOpenAIAPIKeyIdentityChange","Output":"=== RUN TestUpdateCredentialsAtomicallyClearsProbeForOpenAIAPIKeyIdentityChange\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7664925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestUpdateCredentialsAtomicallyClearsProbeForOpenAIAPIKeyIdentityChange","Output":"--- PASS: TestUpdateCredentialsAtomicallyClearsProbeForOpenAIAPIKeyIdentityChange (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7664925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestUpdateCredentialsAtomicallyClearsProbeForOpenAIAPIKeyIdentityChange","Elapsed":0}
- {"Time":"2026-09-12T11:38:33.7664925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1TLSPoolAlwaysSeparatesAccountsProxyAndProfile"}
- {"Time":"2026-09-12T11:38:33.7664925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1TLSPoolAlwaysSeparatesAccountsProxyAndProfile","Output":"=== RUN TestMode1TLSPoolAlwaysSeparatesAccountsProxyAndProfile\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7670033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1TLSPoolAlwaysSeparatesAccountsProxyAndProfile","Output":"--- PASS: TestMode1TLSPoolAlwaysSeparatesAccountsProxyAndProfile (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7670033+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1TLSPoolAlwaysSeparatesAccountsProxyAndProfile","Elapsed":0}
- {"Time":"2026-09-12T11:38:33.7670033+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1DoWithTLSActuallyUsesClientHello"}
- {"Time":"2026-09-12T11:38:33.7670033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1DoWithTLSActuallyUsesClientHello","Output":"=== RUN TestMode1DoWithTLSActuallyUsesClientHello\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.770135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1DoWithTLSActuallyUsesClientHello","Output":"--- PASS: TestMode1DoWithTLSActuallyUsesClientHello (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.770135+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1DoWithTLSActuallyUsesClientHello","Elapsed":0}
- {"Time":"2026-09-12T11:38:33.770135+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestNewOpenAIOAuthClient_DefaultTokenURL"}
- {"Time":"2026-09-12T11:38:33.770135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestNewOpenAIOAuthClient_DefaultTokenURL","Output":"=== RUN TestNewOpenAIOAuthClient_DefaultTokenURL\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.770135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestNewOpenAIOAuthClient_DefaultTokenURL","Output":"--- PASS: TestNewOpenAIOAuthClient_DefaultTokenURL (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.770135+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestNewOpenAIOAuthClient_DefaultTokenURL","Elapsed":0}
- {"Time":"2026-09-12T11:38:33.770135+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite"}
- {"Time":"2026-09-12T11:38:33.770135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite","Output":"=== RUN TestOpenAIOAuthServiceSuite\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.770135+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestContextCancel"}
- {"Time":"2026-09-12T11:38:33.770135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestContextCancel","Output":"=== RUN TestOpenAIOAuthServiceSuite/TestContextCancel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7711578+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestContextCancel","Output":"--- PASS: TestOpenAIOAuthServiceSuite/TestContextCancel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7711578+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestContextCancel","Elapsed":0}
- {"Time":"2026-09-12T11:38:33.7716688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_DefaultRedirectURI"}
- {"Time":"2026-09-12T11:38:33.7716688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_DefaultRedirectURI","Output":"=== RUN TestOpenAIOAuthServiceSuite/TestExchangeCode_DefaultRedirectURI\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7721787+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_DefaultRedirectURI","Output":"--- PASS: TestOpenAIOAuthServiceSuite/TestExchangeCode_DefaultRedirectURI (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7721787+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_DefaultRedirectURI","Elapsed":0}
- {"Time":"2026-09-12T11:38:33.7721787+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_RequestErrorWithoutProxyReturnsProxyHint"}
- {"Time":"2026-09-12T11:38:33.7721787+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_RequestErrorWithoutProxyReturnsProxyHint","Output":"=== RUN TestOpenAIOAuthServiceSuite/TestExchangeCode_RequestErrorWithoutProxyReturnsProxyHint\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7721787+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_RequestErrorWithoutProxyReturnsProxyHint","Output":"--- PASS: TestOpenAIOAuthServiceSuite/TestExchangeCode_RequestErrorWithoutProxyReturnsProxyHint (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7721787+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_RequestErrorWithoutProxyReturnsProxyHint","Elapsed":0}
- {"Time":"2026-09-12T11:38:33.7721787+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_SuccessButInvalidJSON"}
- {"Time":"2026-09-12T11:38:33.7721787+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_SuccessButInvalidJSON","Output":"=== RUN TestOpenAIOAuthServiceSuite/TestExchangeCode_SuccessButInvalidJSON\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7727289+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_SuccessButInvalidJSON","Output":"--- PASS: TestOpenAIOAuthServiceSuite/TestExchangeCode_SuccessButInvalidJSON (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7727289+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_SuccessButInvalidJSON","Elapsed":0}
- {"Time":"2026-09-12T11:38:33.7727289+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_UseProvidedClientID"}
- {"Time":"2026-09-12T11:38:33.7727289+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_UseProvidedClientID","Output":"=== RUN TestOpenAIOAuthServiceSuite/TestExchangeCode_UseProvidedClientID\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7732366+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_UseProvidedClientID","Output":"--- PASS: TestOpenAIOAuthServiceSuite/TestExchangeCode_UseProvidedClientID (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7732366+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_UseProvidedClientID","Elapsed":0}
- {"Time":"2026-09-12T11:38:33.7732366+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_UsesProvidedRedirectURI"}
- {"Time":"2026-09-12T11:38:33.7732366+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_UsesProvidedRedirectURI","Output":"=== RUN TestOpenAIOAuthServiceSuite/TestExchangeCode_UsesProvidedRedirectURI\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7737462+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_UsesProvidedRedirectURI","Output":"--- PASS: TestOpenAIOAuthServiceSuite/TestExchangeCode_UsesProvidedRedirectURI (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7737462+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_UsesProvidedRedirectURI","Elapsed":0}
- {"Time":"2026-09-12T11:38:33.7737462+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestNonSuccessStatus_IncludesBody"}
- {"Time":"2026-09-12T11:38:33.7737462+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestNonSuccessStatus_IncludesBody","Output":"=== RUN TestOpenAIOAuthServiceSuite/TestNonSuccessStatus_IncludesBody\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7737462+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestNonSuccessStatus_IncludesBody","Output":"--- PASS: TestOpenAIOAuthServiceSuite/TestNonSuccessStatus_IncludesBody (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7742558+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestNonSuccessStatus_IncludesBody","Elapsed":0}
- {"Time":"2026-09-12T11:38:33.7742558+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRefreshToken_DefaultsToOpenAIClientID"}
- {"Time":"2026-09-12T11:38:33.7742558+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRefreshToken_DefaultsToOpenAIClientID","Output":"=== RUN TestOpenAIOAuthServiceSuite/TestRefreshToken_DefaultsToOpenAIClientID\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7742558+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRefreshToken_DefaultsToOpenAIClientID","Output":"--- PASS: TestOpenAIOAuthServiceSuite/TestRefreshToken_DefaultsToOpenAIClientID (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7742558+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRefreshToken_DefaultsToOpenAIClientID","Elapsed":0}
- {"Time":"2026-09-12T11:38:33.7742558+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRefreshToken_FormFields"}
- {"Time":"2026-09-12T11:38:33.7742558+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRefreshToken_FormFields","Output":"=== RUN TestOpenAIOAuthServiceSuite/TestRefreshToken_FormFields\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7747668+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRefreshToken_FormFields","Output":"--- PASS: TestOpenAIOAuthServiceSuite/TestRefreshToken_FormFields (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7747668+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRefreshToken_FormFields","Elapsed":0}
- {"Time":"2026-09-12T11:38:33.7747668+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRefreshToken_NonSuccessStatus"}
- {"Time":"2026-09-12T11:38:33.7747668+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRefreshToken_NonSuccessStatus","Output":"=== RUN TestOpenAIOAuthServiceSuite/TestRefreshToken_NonSuccessStatus\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.775274+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRefreshToken_NonSuccessStatus","Output":"--- PASS: TestOpenAIOAuthServiceSuite/TestRefreshToken_NonSuccessStatus (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.775274+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRefreshToken_NonSuccessStatus","Elapsed":0}
- {"Time":"2026-09-12T11:38:33.775274+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRefreshToken_UseProvidedClientID"}
- {"Time":"2026-09-12T11:38:33.775274+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRefreshToken_UseProvidedClientID","Output":"=== RUN TestOpenAIOAuthServiceSuite/TestRefreshToken_UseProvidedClientID\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.775274+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRefreshToken_UseProvidedClientID","Output":"--- PASS: TestOpenAIOAuthServiceSuite/TestRefreshToken_UseProvidedClientID (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.775274+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRefreshToken_UseProvidedClientID","Elapsed":0}
- {"Time":"2026-09-12T11:38:33.775274+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRequestError_ClosedServer"}
- {"Time":"2026-09-12T11:38:33.775274+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRequestError_ClosedServer","Output":"=== RUN TestOpenAIOAuthServiceSuite/TestRequestError_ClosedServer\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7757847+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRequestError_ClosedServer","Output":"--- PASS: TestOpenAIOAuthServiceSuite/TestRequestError_ClosedServer (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7757847+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRequestError_ClosedServer","Elapsed":0}
- {"Time":"2026-09-12T11:38:33.7757847+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestTokenURL_CanBeOverriddenWithQuery"}
- {"Time":"2026-09-12T11:38:33.7757847+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestTokenURL_CanBeOverriddenWithQuery","Output":"=== RUN TestOpenAIOAuthServiceSuite/TestTokenURL_CanBeOverriddenWithQuery\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7762931+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestTokenURL_CanBeOverriddenWithQuery","Output":"--- PASS: TestOpenAIOAuthServiceSuite/TestTokenURL_CanBeOverriddenWithQuery (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7762931+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestTokenURL_CanBeOverriddenWithQuery","Elapsed":0}
- {"Time":"2026-09-12T11:38:33.7762931+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite","Output":"--- PASS: TestOpenAIOAuthServiceSuite (0.01s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7762931+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite","Elapsed":0.01}
- {"Time":"2026-09-12T11:38:33.7762931+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpsRepositoryGetOpenAITokenStats_PaginationMode"}
- {"Time":"2026-09-12T11:38:33.7762931+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpsRepositoryGetOpenAITokenStats_PaginationMode","Output":"=== RUN TestOpsRepositoryGetOpenAITokenStats_PaginationMode\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7762931+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpsRepositoryGetOpenAITokenStats_PaginationMode","Output":"--- PASS: TestOpsRepositoryGetOpenAITokenStats_PaginationMode (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7762931+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpsRepositoryGetOpenAITokenStats_PaginationMode","Elapsed":0}
- {"Time":"2026-09-12T11:38:33.7762931+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpsRepositoryGetOpenAITokenStats_TopNMode"}
- {"Time":"2026-09-12T11:38:33.7762931+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpsRepositoryGetOpenAITokenStats_TopNMode","Output":"=== RUN TestOpsRepositoryGetOpenAITokenStats_TopNMode\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpsRepositoryGetOpenAITokenStats_TopNMode","Output":"--- PASS: TestOpsRepositoryGetOpenAITokenStats_TopNMode (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpsRepositoryGetOpenAITokenStats_TopNMode","Elapsed":0}
- {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpsRepositoryGetOpenAITokenStats_EmptyResult"}
- {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpsRepositoryGetOpenAITokenStats_EmptyResult","Output":"=== RUN TestOpsRepositoryGetOpenAITokenStats_EmptyResult\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpsRepositoryGetOpenAITokenStats_EmptyResult","Output":"--- PASS: TestOpsRepositoryGetOpenAITokenStats_EmptyResult (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpsRepositoryGetOpenAITokenStats_EmptyResult","Elapsed":0}
- {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestCreateOpenAIReqClient_Timeout120Seconds"}
- {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestCreateOpenAIReqClient_Timeout120Seconds","Output":"=== RUN TestCreateOpenAIReqClient_Timeout120Seconds\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestCreateOpenAIReqClient_Timeout120Seconds","Output":"--- PASS: TestCreateOpenAIReqClient_Timeout120Seconds (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestCreateOpenAIReqClient_Timeout120Seconds","Elapsed":0}
- {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestSchedulerMetadataAccountKeepsOpenAISubscriptionIdentity"}
- {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestSchedulerMetadataAccountKeepsOpenAISubscriptionIdentity","Output":"=== RUN TestSchedulerMetadataAccountKeepsOpenAISubscriptionIdentity\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestSchedulerMetadataAccountKeepsOpenAISubscriptionIdentity","Output":"--- PASS: TestSchedulerMetadataAccountKeepsOpenAISubscriptionIdentity (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestSchedulerMetadataAccountKeepsOpenAISubscriptionIdentity","Elapsed":0}
- {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1SchedulerProjectionRetainsPolicyAndProxy"}
- {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1SchedulerProjectionRetainsPolicyAndProxy","Output":"=== RUN TestMode1SchedulerProjectionRetainsPolicyAndProxy\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1SchedulerProjectionRetainsPolicyAndProxy","Output":"--- PASS: TestMode1SchedulerProjectionRetainsPolicyAndProxy (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1SchedulerProjectionRetainsPolicyAndProxy","Elapsed":0}
- {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1ConcurrencySlotsRemainBoundedAndRelease"}
- {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1ConcurrencySlotsRemainBoundedAndRelease","Output":"=== RUN TestMode1ConcurrencySlotsRemainBoundedAndRelease\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7788684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1ConcurrencySlotsRemainBoundedAndRelease","Output":"--- PASS: TestMode1ConcurrencySlotsRemainBoundedAndRelease (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7788684+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1ConcurrencySlotsRemainBoundedAndRelease","Elapsed":0}
- {"Time":"2026-09-12T11:38:33.7788684+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIAPIKeyHealthCacheTripsWithinRollingWindow"}
- {"Time":"2026-09-12T11:38:33.7788684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIAPIKeyHealthCacheTripsWithinRollingWindow","Output":"=== RUN TestOpenAIAPIKeyHealthCacheTripsWithinRollingWindow\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7809384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIAPIKeyHealthCacheTripsWithinRollingWindow","Output":"--- PASS: TestOpenAIAPIKeyHealthCacheTripsWithinRollingWindow (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7809384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIAPIKeyHealthCacheTripsWithinRollingWindow","Elapsed":0}
- {"Time":"2026-09-12T11:38:33.7809384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIAPIKeyHealthCacheDropsFailuresOutsideRollingWindow"}
- {"Time":"2026-09-12T11:38:33.7809384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIAPIKeyHealthCacheDropsFailuresOutsideRollingWindow","Output":"=== RUN TestOpenAIAPIKeyHealthCacheDropsFailuresOutsideRollingWindow\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.781465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIAPIKeyHealthCacheDropsFailuresOutsideRollingWindow","Output":"--- PASS: TestOpenAIAPIKeyHealthCacheDropsFailuresOutsideRollingWindow (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.781465+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIAPIKeyHealthCacheDropsFailuresOutsideRollingWindow","Elapsed":0}
- {"Time":"2026-09-12T11:38:33.781465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Output":"PASS\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:33.7858321+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Output":"ok \tgithub.com/Wei-Shaw/sub2api/internal/repository\t4.572s\n"}
- {"Time":"2026-09-12T11:38:33.7858321+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Elapsed":4.573}
- {"Time":"2026-09-12T11:38:34.7370812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutWaitsForCompleteSemanticEvent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:34.737Z\",\"msg\":\"OpenAI first output timeout: account=1 model=model effort= phase=semantic_output elapsed=1.0001679s limit=1s\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:34.7370812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutWaitsForCompleteSemanticEvent","Output":"--- PASS: TestOpenAINativeFirstOutputTimeoutWaitsForCompleteSemanticEvent (1.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.7370812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutWaitsForCompleteSemanticEvent","Elapsed":1}
- {"Time":"2026-09-12T11:38:34.7370812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDoesNotLeakLargePreambleEvent"}
- {"Time":"2026-09-12T11:38:34.7370812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDoesNotLeakLargePreambleEvent","Output":"=== RUN TestOpenAINativeFirstOutputTimeoutDoesNotLeakLargePreambleEvent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9361377+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportEntryAcceptsAgentIdentityAuthJSON"}
- {"Time":"2026-09-12T11:38:34.9361377+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportEntryAcceptsAgentIdentityAuthJSON","Output":"=== RUN TestNormalizeCodexImportEntryAcceptsAgentIdentityAuthJSON\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9366526+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportEntryAcceptsAgentIdentityAuthJSON","Output":"--- PASS: TestNormalizeCodexImportEntryAcceptsAgentIdentityAuthJSON (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9366526+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportEntryAcceptsAgentIdentityAuthJSON","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9366526+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestBuildCodexAgentIdentityKeysUseChatGPTAccountOnly"}
- {"Time":"2026-09-12T11:38:34.9366526+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestBuildCodexAgentIdentityKeysUseChatGPTAccountOnly","Output":"=== RUN TestBuildCodexAgentIdentityKeysUseChatGPTAccountOnly\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9366526+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestBuildCodexAgentIdentityKeysUseChatGPTAccountOnly","Output":"--- PASS: TestBuildCodexAgentIdentityKeysUseChatGPTAccountOnly (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9366526+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestBuildCodexAgentIdentityKeysUseChatGPTAccountOnly","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9366526+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAgentIdentityIndexSeparatesTeamsForSameUser"}
- {"Time":"2026-09-12T11:38:34.9366526+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAgentIdentityIndexSeparatesTeamsForSameUser","Output":"=== RUN TestCodexAgentIdentityIndexSeparatesTeamsForSameUser\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9366526+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAgentIdentityIndexSeparatesTeamsForSameUser","Output":"--- PASS: TestCodexAgentIdentityIndexSeparatesTeamsForSameUser (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9366526+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAgentIdentityIndexSeparatesTeamsForSameUser","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9366526+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsKeepsAgentIdentityTeamsSeparate"}
- {"Time":"2026-09-12T11:38:34.9366526+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsKeepsAgentIdentityTeamsSeparate","Output":"=== RUN TestImportCodexSessionsKeepsAgentIdentityTeamsSeparate\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsKeepsAgentIdentityTeamsSeparate","Output":"--- PASS: TestImportCodexSessionsKeepsAgentIdentityTeamsSeparate (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsKeepsAgentIdentityTeamsSeparate","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsMergesAgentIdentityRuntimesForSameTeam"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsMergesAgentIdentityRuntimesForSameTeam","Output":"=== RUN TestImportCodexSessionsMergesAgentIdentityRuntimesForSameTeam\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsMergesAgentIdentityRuntimesForSameTeam","Output":"--- PASS: TestImportCodexSessionsMergesAgentIdentityRuntimesForSameTeam (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsMergesAgentIdentityRuntimesForSameTeam","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsCreatesAgentIdentityWithoutOAuthExpiry"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsCreatesAgentIdentityWithoutOAuthExpiry","Output":"=== RUN TestImportCodexSessionsCreatesAgentIdentityWithoutOAuthExpiry\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsCreatesAgentIdentityWithoutOAuthExpiry","Output":"--- PASS: TestImportCodexSessionsCreatesAgentIdentityWithoutOAuthExpiry (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsCreatesAgentIdentityWithoutOAuthExpiry","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseCodexSessionImportEntriesSupportsRawTokenJSONAndArray"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseCodexSessionImportEntriesSupportsRawTokenJSONAndArray","Output":"=== RUN TestParseCodexSessionImportEntriesSupportsRawTokenJSONAndArray\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseCodexSessionImportEntriesSupportsRawTokenJSONAndArray","Output":"--- PASS: TestParseCodexSessionImportEntriesSupportsRawTokenJSONAndArray (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseCodexSessionImportEntriesSupportsRawTokenJSONAndArray","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseCodexSessionImportEntriesFallsBackToLineModeForMixedJSONAndToken"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseCodexSessionImportEntriesFallsBackToLineModeForMixedJSONAndToken","Output":"=== RUN TestParseCodexSessionImportEntriesFallsBackToLineModeForMixedJSONAndToken\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseCodexSessionImportEntriesFallsBackToLineModeForMixedJSONAndToken","Output":"--- PASS: TestParseCodexSessionImportEntriesFallsBackToLineModeForMixedJSONAndToken (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseCodexSessionImportEntriesFallsBackToLineModeForMixedJSONAndToken","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexSessionJSONExtractsCredentialsAndIgnoresSessionToken"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexSessionJSONExtractsCredentialsAndIgnoresSessionToken","Output":"=== RUN TestNormalizeCodexSessionJSONExtractsCredentialsAndIgnoresSessionToken\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexSessionJSONExtractsCredentialsAndIgnoresSessionToken","Output":"--- PASS: TestNormalizeCodexSessionJSONExtractsCredentialsAndIgnoresSessionToken (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexSessionJSONExtractsCredentialsAndIgnoresSessionToken","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestMergeCodexImportCredentialsPreservesExistingRefreshFieldsWhenIncomingHasNoRefreshToken"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestMergeCodexImportCredentialsPreservesExistingRefreshFieldsWhenIncomingHasNoRefreshToken","Output":"=== RUN TestMergeCodexImportCredentialsPreservesExistingRefreshFieldsWhenIncomingHasNoRefreshToken\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestMergeCodexImportCredentialsPreservesExistingRefreshFieldsWhenIncomingHasNoRefreshToken","Output":"--- PASS: TestMergeCodexImportCredentialsPreservesExistingRefreshFieldsWhenIncomingHasNoRefreshToken (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestMergeCodexImportCredentialsPreservesExistingRefreshFieldsWhenIncomingHasNoRefreshToken","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestMergeCodexImportCredentialsKeepsRefreshFieldsWhenIncomingHasRefreshToken"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestMergeCodexImportCredentialsKeepsRefreshFieldsWhenIncomingHasRefreshToken","Output":"=== RUN TestMergeCodexImportCredentialsKeepsRefreshFieldsWhenIncomingHasRefreshToken\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestMergeCodexImportCredentialsKeepsRefreshFieldsWhenIncomingHasRefreshToken","Output":"--- PASS: TestMergeCodexImportCredentialsKeepsRefreshFieldsWhenIncomingHasRefreshToken (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestMergeCodexImportCredentialsKeepsRefreshFieldsWhenIncomingHasRefreshToken","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportRejectsExpiredAccessToken"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportRejectsExpiredAccessToken","Output":"=== RUN TestNormalizeCodexImportRejectsExpiredAccessToken\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportRejectsExpiredAccessToken","Output":"--- PASS: TestNormalizeCodexImportRejectsExpiredAccessToken (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportRejectsExpiredAccessToken","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenUsesTokenExpiry"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenUsesTokenExpiry","Output":"=== RUN TestResolveCodexImportExpiryForNoRefreshTokenUsesTokenExpiry\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenUsesTokenExpiry","Output":"--- PASS: TestResolveCodexImportExpiryForNoRefreshTokenUsesTokenExpiry (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenUsesTokenExpiry","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenRequiresExpiry"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenRequiresExpiry","Output":"=== RUN TestResolveCodexImportExpiryForNoRefreshTokenRequiresExpiry\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenRequiresExpiry","Output":"--- PASS: TestResolveCodexImportExpiryForNoRefreshTokenRequiresExpiry (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenRequiresExpiry","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenUsesEarlierRequestExpiry"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenUsesEarlierRequestExpiry","Output":"=== RUN TestResolveCodexImportExpiryForNoRefreshTokenUsesEarlierRequestExpiry\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenUsesEarlierRequestExpiry","Output":"--- PASS: TestResolveCodexImportExpiryForNoRefreshTokenUsesEarlierRequestExpiry (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenUsesEarlierRequestExpiry","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexIdentityKeysPreferStrongIdentifiers"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexIdentityKeysPreferStrongIdentifiers","Output":"=== RUN TestCodexIdentityKeysPreferStrongIdentifiers\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexIdentityKeysPreferStrongIdentifiers","Output":"--- PASS: TestCodexIdentityKeysPreferStrongIdentifiers (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexIdentityKeysPreferStrongIdentifiers","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexDoesNotMatchDifferentUsersInSameChatGPTAccount"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexDoesNotMatchDifferentUsersInSameChatGPTAccount","Output":"=== RUN TestCodexAccountIndexDoesNotMatchDifferentUsersInSameChatGPTAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexDoesNotMatchDifferentUsersInSameChatGPTAccount","Output":"--- PASS: TestCodexAccountIndexDoesNotMatchDifferentUsersInSameChatGPTAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexDoesNotMatchDifferentUsersInSameChatGPTAccount","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexFallsBackToAccountKeyWhenRefreshTokenExistsAndUserIDMissing"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexFallsBackToAccountKeyWhenRefreshTokenExistsAndUserIDMissing","Output":"=== RUN TestCodexAccountIndexFallsBackToAccountKeyWhenRefreshTokenExistsAndUserIDMissing\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexFallsBackToAccountKeyWhenRefreshTokenExistsAndUserIDMissing","Output":"--- PASS: TestCodexAccountIndexFallsBackToAccountKeyWhenRefreshTokenExistsAndUserIDMissing (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexFallsBackToAccountKeyWhenRefreshTokenExistsAndUserIDMissing","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexAccessTokenOnlyUsesTokenFingerprint"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexAccessTokenOnlyUsesTokenFingerprint","Output":"=== RUN TestCodexAccountIndexAccessTokenOnlyUsesTokenFingerprint\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexAccessTokenOnlyUsesTokenFingerprint","Output":"--- PASS: TestCodexAccountIndexAccessTokenOnlyUsesTokenFingerprint (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexAccessTokenOnlyUsesTokenFingerprint","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexKeepsAllCandidatesForSharedAccountKey"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexKeepsAllCandidatesForSharedAccountKey","Output":"=== RUN TestCodexAccountIndexKeepsAllCandidatesForSharedAccountKey\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexKeepsAllCandidatesForSharedAccountKey","Output":"--- PASS: TestCodexAccountIndexKeepsAllCandidatesForSharedAccountKey (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexKeepsAllCandidatesForSharedAccountKey","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpsertReplacesSameAccount"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpsertReplacesSameAccount","Output":"=== RUN TestCodexAccountIndexUpsertReplacesSameAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpsertReplacesSameAccount","Output":"--- PASS: TestCodexAccountIndexUpsertReplacesSameAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpsertReplacesSameAccount","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpdateRemovesAllPreviousKeys"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpdateRemovesAllPreviousKeys","Output":"=== RUN TestCodexAccountIndexUpdateRemovesAllPreviousKeys\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpdateRemovesAllPreviousKeys","Output":"--- PASS: TestCodexAccountIndexUpdateRemovesAllPreviousKeys (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpdateRemovesAllPreviousKeys","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpdatePreservesSharedKeyCandidateOrder"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpdatePreservesSharedKeyCandidateOrder","Output":"=== RUN TestCodexAccountIndexUpdatePreservesSharedKeyCandidateOrder\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpdatePreservesSharedKeyCandidateOrder","Output":"--- PASS: TestCodexAccountIndexUpdatePreservesSharedKeyCandidateOrder (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpdatePreservesSharedKeyCandidateOrder","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexIdentitySeenDistinguishesTeamMembers"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexIdentitySeenDistinguishesTeamMembers","Output":"=== RUN TestCodexIdentitySeenDistinguishesTeamMembers\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexIdentitySeenDistinguishesTeamMembers","Output":"--- PASS: TestCodexIdentitySeenDistinguishesTeamMembers (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexIdentitySeenDistinguishesTeamMembers","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportUsesJWTSubForAccessTokenOnlyIdentity"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportUsesJWTSubForAccessTokenOnlyIdentity","Output":"=== RUN TestNormalizeCodexImportUsesJWTSubForAccessTokenOnlyIdentity\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportUsesJWTSubForAccessTokenOnlyIdentity","Output":"--- PASS: TestNormalizeCodexImportUsesJWTSubForAccessTokenOnlyIdentity (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportUsesJWTSubForAccessTokenOnlyIdentity","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameWorkspaceDifferentUsersCreatesTwoAccounts"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameWorkspaceDifferentUsersCreatesTwoAccounts","Output":"=== RUN TestImportCodexSessionsAccessTokenOnlySameWorkspaceDifferentUsersCreatesTwoAccounts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameWorkspaceDifferentUsersCreatesTwoAccounts","Output":"--- PASS: TestImportCodexSessionsAccessTokenOnlySameWorkspaceDifferentUsersCreatesTwoAccounts (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameWorkspaceDifferentUsersCreatesTwoAccounts","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameWorkspaceAndUserDifferentTokensCreatesTwoAccounts"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameWorkspaceAndUserDifferentTokensCreatesTwoAccounts","Output":"=== RUN TestImportCodexSessionsAccessTokenOnlySameWorkspaceAndUserDifferentTokensCreatesTwoAccounts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameWorkspaceAndUserDifferentTokensCreatesTwoAccounts","Output":"--- PASS: TestImportCodexSessionsAccessTokenOnlySameWorkspaceAndUserDifferentTokensCreatesTwoAccounts (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameWorkspaceAndUserDifferentTokensCreatesTwoAccounts","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameUserUpdatesExisting"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameUserUpdatesExisting","Output":"=== RUN TestImportCodexSessionsAccessTokenOnlySameUserUpdatesExisting\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameUserUpdatesExisting","Output":"--- PASS: TestImportCodexSessionsAccessTokenOnlySameUserUpdatesExisting (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameUserUpdatesExisting","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsUpgradesAccessTokenOnlyAccountWithRefreshToken"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsUpgradesAccessTokenOnlyAccountWithRefreshToken","Output":"=== RUN TestImportCodexSessionsUpgradesAccessTokenOnlyAccountWithRefreshToken\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsUpgradesAccessTokenOnlyAccountWithRefreshToken","Output":"--- PASS: TestImportCodexSessionsUpgradesAccessTokenOnlyAccountWithRefreshToken (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsUpgradesAccessTokenOnlyAccountWithRefreshToken","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlyPreservesExistingRefreshToken"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlyPreservesExistingRefreshToken","Output":"=== RUN TestImportCodexSessionsAccessTokenOnlyPreservesExistingRefreshToken\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlyPreservesExistingRefreshToken","Output":"--- PASS: TestImportCodexSessionsAccessTokenOnlyPreservesExistingRefreshToken (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlyPreservesExistingRefreshToken","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsBatchOldAccessTokenDoesNotRollbackRefreshToken"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsBatchOldAccessTokenDoesNotRollbackRefreshToken","Output":"=== RUN TestImportCodexSessionsBatchOldAccessTokenDoesNotRollbackRefreshToken\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsBatchOldAccessTokenDoesNotRollbackRefreshToken","Output":"--- PASS: TestImportCodexSessionsBatchOldAccessTokenDoesNotRollbackRefreshToken (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsBatchOldAccessTokenDoesNotRollbackRefreshToken","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsWithRefreshTokenKeepsExistingDedup"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsWithRefreshTokenKeepsExistingDedup","Output":"=== RUN TestImportCodexSessionsWithRefreshTokenKeepsExistingDedup\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsWithRefreshTokenKeepsExistingDedup","Output":"--- PASS: TestImportCodexSessionsWithRefreshTokenKeepsExistingDedup (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsWithRefreshTokenKeepsExistingDedup","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountHandlerGetAvailableModels_OpenAIOAuthUsesExplicitModelMapping"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountHandlerGetAvailableModels_OpenAIOAuthUsesExplicitModelMapping","Output":"=== RUN TestAccountHandlerGetAvailableModels_OpenAIOAuthUsesExplicitModelMapping\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountHandlerGetAvailableModels_OpenAIOAuthUsesExplicitModelMapping","Output":"--- PASS: TestAccountHandlerGetAvailableModels_OpenAIOAuthUsesExplicitModelMapping (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountHandlerGetAvailableModels_OpenAIOAuthUsesExplicitModelMapping","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountHandlerGetAvailableModels_OpenAIOAuthPassthroughFallsBackToDefaults"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountHandlerGetAvailableModels_OpenAIOAuthPassthroughFallsBackToDefaults","Output":"=== RUN TestAccountHandlerGetAvailableModels_OpenAIOAuthPassthroughFallsBackToDefaults\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountHandlerGetAvailableModels_OpenAIOAuthPassthroughFallsBackToDefaults","Output":"--- PASS: TestAccountHandlerGetAvailableModels_OpenAIOAuthPassthroughFallsBackToDefaults (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountHandlerGetAvailableModels_OpenAIOAuthPassthroughFallsBackToDefaults","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountHandlerGetAvailableModels_OpenAIAPIKeyDefaultsToConcreteGPT56Sol"}
- {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountHandlerGetAvailableModels_OpenAIAPIKeyDefaultsToConcreteGPT56Sol","Output":"=== RUN TestAccountHandlerGetAvailableModels_OpenAIAPIKeyDefaultsToConcreteGPT56Sol\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountHandlerGetAvailableModels_OpenAIAPIKeyDefaultsToConcreteGPT56Sol","Output":"--- PASS: TestAccountHandlerGetAvailableModels_OpenAIAPIKeyDefaultsToConcreteGPT56Sol (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountHandlerGetAvailableModels_OpenAIAPIKeyDefaultsToConcreteGPT56Sol","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountHandlerGetAvailableModels_OpenAISparkShadowReturnsMappingModels"}
- {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountHandlerGetAvailableModels_OpenAISparkShadowReturnsMappingModels","Output":"=== RUN TestAccountHandlerGetAvailableModels_OpenAISparkShadowReturnsMappingModels\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountHandlerGetAvailableModels_OpenAISparkShadowReturnsMappingModels","Output":"--- PASS: TestAccountHandlerGetAvailableModels_OpenAISparkShadowReturnsMappingModels (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountHandlerGetAvailableModels_OpenAISparkShadowReturnsMappingModels","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue"}
- {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue","Output":"=== RUN TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/create"}
- {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/create","Output":"=== RUN TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/create\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/create","Output":"--- PASS: TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/create (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/create","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/update"}
- {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/update","Output":"=== RUN TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/update\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/update","Output":"--- PASS: TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/update (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/update","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/bulk_update"}
- {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/bulk_update","Output":"=== RUN TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/bulk_update\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/bulk_update","Output":"--- PASS: TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/bulk_update (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/bulk_update","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/batch_create"}
- {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/batch_create","Output":"=== RUN TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/batch_create\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/batch_create","Output":"--- PASS: TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/batch_create (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/batch_create","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/Codex_session_import"}
- {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/Codex_session_import","Output":"=== RUN TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/Codex_session_import\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/Codex_session_import","Output":"--- PASS: TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/Codex_session_import (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/Codex_session_import","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue","Output":"--- PASS: TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountCreateBoundaryDoesNotApplyOpenAIValidationToOtherPlatforms"}
- {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountCreateBoundaryDoesNotApplyOpenAIValidationToOtherPlatforms","Output":"=== RUN TestAccountCreateBoundaryDoesNotApplyOpenAIValidationToOtherPlatforms\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountCreateBoundaryDoesNotApplyOpenAIValidationToOtherPlatforms","Output":"--- PASS: TestAccountCreateBoundaryDoesNotApplyOpenAIValidationToOtherPlatforms (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountCreateBoundaryDoesNotApplyOpenAIValidationToOtherPlatforms","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestApplyOAuthCredentialsRejectsMalformedOpenAILongContextBillingBeforeMutation"}
- {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestApplyOAuthCredentialsRejectsMalformedOpenAILongContextBillingBeforeMutation","Output":"=== RUN TestApplyOAuthCredentialsRejectsMalformedOpenAILongContextBillingBeforeMutation\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestApplyOAuthCredentialsRejectsMalformedOpenAILongContextBillingBeforeMutation","Output":"--- PASS: TestApplyOAuthCredentialsRejectsMalformedOpenAILongContextBillingBeforeMutation (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestApplyOAuthCredentialsRejectsMalformedOpenAILongContextBillingBeforeMutation","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIOAuthCodexPATBoundaryRejectsMalformedOpenAILongContextBillingValueBeforeTokenValidation"}
- {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIOAuthCodexPATBoundaryRejectsMalformedOpenAILongContextBillingValueBeforeTokenValidation","Output":"=== RUN TestOpenAIOAuthCodexPATBoundaryRejectsMalformedOpenAILongContextBillingValueBeforeTokenValidation\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIOAuthCodexPATBoundaryRejectsMalformedOpenAILongContextBillingValueBeforeTokenValidation","Output":"--- PASS: TestOpenAIOAuthCodexPATBoundaryRejectsMalformedOpenAILongContextBillingValueBeforeTokenValidation (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIOAuthCodexPATBoundaryRejectsMalformedOpenAILongContextBillingValueBeforeTokenValidation","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseOpsOpenAITokenStatsDuration"}
- {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseOpsOpenAITokenStatsDuration","Output":"=== RUN TestParseOpsOpenAITokenStatsDuration\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseOpsOpenAITokenStatsDuration","Output":"--- PASS: TestParseOpsOpenAITokenStatsDuration (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseOpsOpenAITokenStatsDuration","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseOpsOpenAITokenStatsFilter_Defaults"}
- {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseOpsOpenAITokenStatsFilter_Defaults","Output":"=== RUN TestParseOpsOpenAITokenStatsFilter_Defaults\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseOpsOpenAITokenStatsFilter_Defaults","Output":"--- PASS: TestParseOpsOpenAITokenStatsFilter_Defaults (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseOpsOpenAITokenStatsFilter_Defaults","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseOpsOpenAITokenStatsFilter_WithTopN"}
- {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseOpsOpenAITokenStatsFilter_WithTopN","Output":"=== RUN TestParseOpsOpenAITokenStatsFilter_WithTopN\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseOpsOpenAITokenStatsFilter_WithTopN","Output":"--- PASS: TestParseOpsOpenAITokenStatsFilter_WithTopN (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseOpsOpenAITokenStatsFilter_WithTopN","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseOpsOpenAITokenStatsFilter_InvalidParams"}
- {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseOpsOpenAITokenStatsFilter_InvalidParams","Output":"=== RUN TestParseOpsOpenAITokenStatsFilter_InvalidParams\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9391944+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseOpsOpenAITokenStatsFilter_InvalidParams","Output":"--- PASS: TestParseOpsOpenAITokenStatsFilter_InvalidParams (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9391944+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseOpsOpenAITokenStatsFilter_InvalidParams","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9391944+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier"}
- {"Time":"2026-09-12T11:38:34.9391944+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier","Output":"=== RUN TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9391944+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/nil_input_returns_nil"}
- {"Time":"2026-09-12T11:38:34.9391944+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/nil_input_returns_nil","Output":"=== RUN TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/nil_input_returns_nil\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9391944+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/nil_input_returns_nil","Output":"--- PASS: TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/nil_input_returns_nil (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9391944+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/nil_input_returns_nil","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9391944+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/empty_service_tier_becomes_'all'"}
- {"Time":"2026-09-12T11:38:34.9391944+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/empty_service_tier_becomes_'all'","Output":"=== RUN TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/empty_service_tier_becomes_'all'\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9391944+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/empty_service_tier_becomes_'all'","Output":"--- PASS: TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/empty_service_tier_becomes_'all' (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9391944+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/empty_service_tier_becomes_'all'","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9391944+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/whitespace-only_service_tier_becomes_'all'"}
- {"Time":"2026-09-12T11:38:34.9397093+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/whitespace-only_service_tier_becomes_'all'","Output":"=== RUN TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/whitespace-only_service_tier_becomes_'all'\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9397093+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/whitespace-only_service_tier_becomes_'all'","Output":"--- PASS: TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/whitespace-only_service_tier_becomes_'all' (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9397093+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/whitespace-only_service_tier_becomes_'all'","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9397093+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/uppercase_service_tier_is_lowercased"}
- {"Time":"2026-09-12T11:38:34.9397093+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/uppercase_service_tier_is_lowercased","Output":"=== RUN TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/uppercase_service_tier_is_lowercased\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9397093+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/uppercase_service_tier_is_lowercased","Output":"--- PASS: TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/uppercase_service_tier_is_lowercased (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9397093+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/uppercase_service_tier_is_lowercased","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9397093+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/non-empty_values_pass_through_(lowercased)"}
- {"Time":"2026-09-12T11:38:34.9397093+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/non-empty_values_pass_through_(lowercased)","Output":"=== RUN TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/non-empty_values_pass_through_(lowercased)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9397093+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/non-empty_values_pass_through_(lowercased)","Output":"--- PASS: TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/non-empty_values_pass_through_(lowercased) (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9397093+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/non-empty_values_pass_through_(lowercased)","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9397093+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier","Output":"--- PASS: TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9397093+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9397093+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestGroupRequestsDecodeForceOpenAIFast"}
- {"Time":"2026-09-12T11:38:34.9397093+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestGroupRequestsDecodeForceOpenAIFast","Output":"=== RUN TestGroupRequestsDecodeForceOpenAIFast\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9402179+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestGroupRequestsDecodeForceOpenAIFast","Output":"--- PASS: TestGroupRequestsDecodeForceOpenAIFast (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9402179+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestGroupRequestsDecodeForceOpenAIFast","Elapsed":0}
- {"Time":"2026-09-12T11:38:34.9402179+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Output":"PASS\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:34.9437934+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Output":"ok \tgithub.com/Wei-Shaw/sub2api/internal/handler/admin\t5.731s\n"}
- {"Time":"2026-09-12T11:38:34.9437934+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Elapsed":5.731}
- {"Time":"2026-09-12T11:38:35.7372964+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDoesNotLeakLargePreambleEvent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:35.737Z\",\"msg\":\"OpenAI first output timeout: account=1 model=model effort= phase=semantic_output elapsed=1.0002152s limit=1s\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:35.7372964+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDoesNotLeakLargePreambleEvent","Output":"--- PASS: TestOpenAINativeFirstOutputTimeoutDoesNotLeakLargePreambleEvent (1.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:35.7372964+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDoesNotLeakLargePreambleEvent","Elapsed":1}
- {"Time":"2026-09-12T11:38:35.7372964+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputEOFDispatchesTerminalEventWithoutBlankLine"}
- {"Time":"2026-09-12T11:38:35.7372964+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputEOFDispatchesTerminalEventWithoutBlankLine","Output":"=== RUN TestOpenAINativeFirstOutputEOFDispatchesTerminalEventWithoutBlankLine\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:35.7372964+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputEOFDispatchesTerminalEventWithoutBlankLine","Output":"--- PASS: TestOpenAINativeFirstOutputEOFDispatchesTerminalEventWithoutBlankLine (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:35.7372964+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputEOFDispatchesTerminalEventWithoutBlankLine","Elapsed":0}
- {"Time":"2026-09-12T11:38:35.7372964+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputStageOverflowFailsOverWithoutAttemptBytes"}
- {"Time":"2026-09-12T11:38:35.7372964+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputStageOverflowFailsOverWithoutAttemptBytes","Output":"=== RUN TestOpenAINativeFirstOutputStageOverflowFailsOverWithoutAttemptBytes\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:35.806641+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputStageOverflowFailsOverWithoutAttemptBytes","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:38:35.806Z\",\"msg\":\"OpenAI first-output staging limit exceeded: account=1 model=model error=openai first-output staging limit exceeded: buffered=8386568 incoming=1048320 limit=8388608\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).handleStreamingResponseWithReasoning.func7\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_response_handling.go:275\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).handleStreamingResponseWithReasoning.func14\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_response_handling.go:705\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).handleStreamingResponseWithReasoning\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_response_handling.go:881\\ngithub.com/Wei-Shaw/sub"}
- {"Time":"2026-09-12T11:38:35.8074865+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputStageOverflowFailsOverWithoutAttemptBytes","Output":"2api/internal/service.(*OpenAIGatewayService).handleStreamingResponse\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_response_handling.go:48\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAINativeFirstOutputStageOverflowFailsOverWithoutAttemptBytes\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_first_output_timeout_test.go:500\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"}
- {"Time":"2026-09-12T11:38:35.8074865+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputStageOverflowFailsOverWithoutAttemptBytes","Output":"--- PASS: TestOpenAINativeFirstOutputStageOverflowFailsOverWithoutAttemptBytes (0.07s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:35.8074865+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputStageOverflowFailsOverWithoutAttemptBytes","Elapsed":0.07}
- {"Time":"2026-09-12T11:38:35.8074865+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputScannerRejectsOversizedLineWithoutLeak"}
- {"Time":"2026-09-12T11:38:35.8074865+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputScannerRejectsOversizedLineWithoutLeak","Output":"=== RUN TestOpenAINativeFirstOutputScannerRejectsOversizedLineWithoutLeak\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:35.812476+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputScannerRejectsOversizedLineWithoutLeak","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:38:35.812Z\",\"msg\":\"SSE token exceeded guarded first-output limit: account=1 limit=8388672 error=openai pre-output scanner token limit exceeded\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).handleStreamingResponseWithReasoning.func13\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_response_handling.go:418\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).handleStreamingResponseWithReasoning\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_response_handling.go:877\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).handleStreamingResponse\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_response_handling.go:48\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAINativeFirstOutputScannerReje"}
- {"Time":"2026-09-12T11:38:35.812476+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputScannerRejectsOversizedLineWithoutLeak","Output":"ctsOversizedLineWithoutLeak\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_first_output_timeout_test.go:532\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"}
- {"Time":"2026-09-12T11:38:35.812476+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputScannerRejectsOversizedLineWithoutLeak","Output":"--- PASS: TestOpenAINativeFirstOutputScannerRejectsOversizedLineWithoutLeak (0.01s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:35.812476+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputScannerRejectsOversizedLineWithoutLeak","Elapsed":0.01}
- {"Time":"2026-09-12T11:38:35.812476+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputScannerAllowsLargeEventAfterSemanticBoundary"}
- {"Time":"2026-09-12T11:38:35.812476+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputScannerAllowsLargeEventAfterSemanticBoundary","Output":"=== RUN TestOpenAINativeFirstOutputScannerAllowsLargeEventAfterSemanticBoundary\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:35.9349495+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputScannerAllowsLargeEventAfterSemanticBoundary","Output":"--- PASS: TestOpenAINativeFirstOutputScannerAllowsLargeEventAfterSemanticBoundary (0.12s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:35.9349495+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputScannerAllowsLargeEventAfterSemanticBoundary","Elapsed":0.12}
- {"Time":"2026-09-12T11:38:35.9349495+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDisabledKeepsPreamblePrivateAcrossKeepalive"}
- {"Time":"2026-09-12T11:38:35.9349495+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDisabledKeepsPreamblePrivateAcrossKeepalive","Output":"=== RUN TestOpenAINativeFirstOutputTimeoutDisabledKeepsPreamblePrivateAcrossKeepalive\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:38.0352275+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDisabledKeepsPreamblePrivateAcrossKeepalive","Output":"--- PASS: TestOpenAINativeFirstOutputTimeoutDisabledKeepsPreamblePrivateAcrossKeepalive (2.10s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:38.0352275+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDisabledKeepsPreamblePrivateAcrossKeepalive","Elapsed":2.1}
- {"Time":"2026-09-12T11:38:38.0352275+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputFailoverKeepsAttemptHeadersPrivateAfterKeepaliveCommit"}
- {"Time":"2026-09-12T11:38:38.0352275+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputFailoverKeepsAttemptHeadersPrivateAfterKeepaliveCommit","Output":"=== RUN TestOpenAINativeFirstOutputFailoverKeepsAttemptHeadersPrivateAfterKeepaliveCommit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0357168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputFailoverKeepsAttemptHeadersPrivateAfterKeepaliveCommit","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.035Z\",\"msg\":\"OpenAI first output timeout: account=1 model=model effort= phase=semantic_output elapsed=2.0004893s limit=2s\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0357168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputFailoverKeepsAttemptHeadersPrivateAfterKeepaliveCommit","Output":"--- PASS: TestOpenAINativeFirstOutputFailoverKeepsAttemptHeadersPrivateAfterKeepaliveCommit (2.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0357168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputFailoverKeepsAttemptHeadersPrivateAfterKeepaliveCommit","Elapsed":2}
- {"Time":"2026-09-12T11:38:40.0357168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResetsOpenAI403CounterForZeroUsage"}
- {"Time":"2026-09-12T11:38:40.0357168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResetsOpenAI403CounterForZeroUsage","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_ResetsOpenAI403CounterForZeroUsage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0357168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResetsOpenAI403CounterForZeroUsage","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.035Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0362201+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResetsOpenAI403CounterForZeroUsage","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.035Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0362201+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResetsOpenAI403CounterForZeroUsage","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_ResetsOpenAI403CounterForZeroUsage (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0362201+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResetsOpenAI403CounterForZeroUsage","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0362201+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.036Z\",\"logger\":\"slog\",\"msg\":\"notifyBalanceLow: skipped\",\"service\":\"sub2api\",\"env\":\"test\",\"is_subscription\":false,\"actual_cost\":0,\"user_nil\":false,\"service_nil\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0362201+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.036Z\",\"logger\":\"slog\",\"msg\":\"notifyAccountQuota: skipped\",\"service\":\"sub2api\",\"env\":\"test\",\"total_cost\":0,\"account_nil\":false,\"is_apikey_or_bedrock\":false,\"service_nil\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0362201+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_APIKeyUsesResponsesInputTokens"}
- {"Time":"2026-09-12T11:38:40.0362201+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_APIKeyUsesResponsesInputTokens","Output":"=== RUN TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_APIKeyUsesResponsesInputTokens\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0362201+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_APIKeyUsesResponsesInputTokens","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.036Z\",\"msg\":\"openai count_tokens: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":101,\"original_model\":\"claude-sonnet-4-5\",\"normalized_model\":\"claude-sonnet-4-5\",\"billing_model\":\"gpt-5.3-codex\",\"upstream_model\":\"gpt-5.3-codex\"}\n"}
- {"Time":"2026-09-12T11:38:40.0362201+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_APIKeyUsesResponsesInputTokens","Output":"--- PASS: TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_APIKeyUsesResponsesInputTokens (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0362201+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_APIKeyUsesResponsesInputTokens","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0362201+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported"}
- {"Time":"2026-09-12T11:38:40.0362201+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported","Output":"=== RUN TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0440504+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/401_missing_responses_write_scope"}
- {"Time":"2026-09-12T11:38:40.0440504+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/401_missing_responses_write_scope","Output":"=== RUN TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/401_missing_responses_write_scope\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/401_missing_responses_write_scope","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.044Z\",\"msg\":\"openai count_tokens: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":202,\"original_model\":\"claude-opus-4-1\",\"normalized_model\":\"claude-opus-4-1\",\"billing_model\":\"gpt-5.4\",\"upstream_model\":\"gpt-5.4\"}\n"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/401_missing_responses_write_scope","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.044Z\",\"msg\":\"openai count_tokens: oauth fallback to local tiktoken estimate\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":202,\"upstream_status\":401,\"estimated_input_tokens\":6,\"upstream_model\":\"gpt-5.4\"}\n"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/401_missing_responses_write_scope","Output":"--- PASS: TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/401_missing_responses_write_scope (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/401_missing_responses_write_scope","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/403_missing_responses_write_scope"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/403_missing_responses_write_scope","Output":"=== RUN TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/403_missing_responses_write_scope\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/403_missing_responses_write_scope","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.044Z\",\"msg\":\"openai count_tokens: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":202,\"original_model\":\"claude-opus-4-1\",\"normalized_model\":\"claude-opus-4-1\",\"billing_model\":\"gpt-5.4\",\"upstream_model\":\"gpt-5.4\"}\n"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/403_missing_responses_write_scope","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.044Z\",\"msg\":\"openai count_tokens: oauth fallback to local tiktoken estimate\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":202,\"upstream_status\":403,\"estimated_input_tokens\":6,\"upstream_model\":\"gpt-5.4\"}\n"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/403_missing_responses_write_scope","Output":"--- PASS: TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/403_missing_responses_write_scope (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/403_missing_responses_write_scope","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/403_html_proxy_page"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/403_html_proxy_page","Output":"=== RUN TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/403_html_proxy_page\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/403_html_proxy_page","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.044Z\",\"msg\":\"openai count_tokens: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":202,\"original_model\":\"claude-opus-4-1\",\"normalized_model\":\"claude-opus-4-1\",\"billing_model\":\"gpt-5.4\",\"upstream_model\":\"gpt-5.4\"}\n"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/403_html_proxy_page","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.044Z\",\"msg\":\"openai count_tokens: oauth fallback to local tiktoken estimate\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":202,\"upstream_status\":403,\"estimated_input_tokens\":6,\"upstream_model\":\"gpt-5.4\"}\n"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/403_html_proxy_page","Output":"--- PASS: TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/403_html_proxy_page (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/403_html_proxy_page","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/404_input_tokens_unsupported"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/404_input_tokens_unsupported","Output":"=== RUN TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/404_input_tokens_unsupported\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/404_input_tokens_unsupported","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.044Z\",\"msg\":\"openai count_tokens: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":202,\"original_model\":\"claude-opus-4-1\",\"normalized_model\":\"claude-opus-4-1\",\"billing_model\":\"gpt-5.4\",\"upstream_model\":\"gpt-5.4\"}\n"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/404_input_tokens_unsupported","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.044Z\",\"msg\":\"openai count_tokens: oauth fallback to local tiktoken estimate\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":202,\"upstream_status\":404,\"estimated_input_tokens\":6,\"upstream_model\":\"gpt-5.4\"}\n"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/404_input_tokens_unsupported","Output":"--- PASS: TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/404_input_tokens_unsupported (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/404_input_tokens_unsupported","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported","Output":"--- PASS: TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported (0.01s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported","Elapsed":0.01}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIOAuthInputTokensFallbackUsesMinimumWhenEstimateFails"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIOAuthInputTokensFallbackUsesMinimumWhenEstimateFails","Output":"=== RUN TestOpenAIGatewayService_OpenAIOAuthInputTokensFallbackUsesMinimumWhenEstimateFails\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIOAuthInputTokensFallbackUsesMinimumWhenEstimateFails","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.044Z\",\"msg\":\"openai count_tokens: oauth local tiktoken fallback failed, using minimum estimate\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":303,\"upstream_status\":401,\"estimated_input_tokens\":1,\"upstream_model\":\"gpt-5\",\"error\":\"unexpected end of JSON input\"}\n"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIOAuthInputTokensFallbackUsesMinimumWhenEstimateFails","Output":"--- PASS: TestOpenAIGatewayService_OpenAIOAuthInputTokensFallbackUsesMinimumWhenEstimateFails (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIOAuthInputTokensFallbackUsesMinimumWhenEstimateFails","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_RequestSamples"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_RequestSamples","Output":"=== RUN TestEstimateOpenAIInputTokens_RequestSamples\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_RequestSamples/simple_text_input"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_RequestSamples/simple_text_input","Output":"=== RUN TestEstimateOpenAIInputTokens_RequestSamples/simple_text_input\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_RequestSamples/simple_text_input","Output":"--- PASS: TestEstimateOpenAIInputTokens_RequestSamples/simple_text_input (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_RequestSamples/simple_text_input","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_RequestSamples/instructions_plus_tool_schema"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_RequestSamples/instructions_plus_tool_schema","Output":"=== RUN TestEstimateOpenAIInputTokens_RequestSamples/instructions_plus_tool_schema\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_RequestSamples/instructions_plus_tool_schema","Output":"--- PASS: TestEstimateOpenAIInputTokens_RequestSamples/instructions_plus_tool_schema (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_RequestSamples/instructions_plus_tool_schema","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_RequestSamples/input_parts_and_tool_output"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_RequestSamples/input_parts_and_tool_output","Output":"=== RUN TestEstimateOpenAIInputTokens_RequestSamples/input_parts_and_tool_output\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_RequestSamples/input_parts_and_tool_output","Output":"--- PASS: TestEstimateOpenAIInputTokens_RequestSamples/input_parts_and_tool_output (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_RequestSamples/input_parts_and_tool_output","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_RequestSamples","Output":"--- PASS: TestEstimateOpenAIInputTokens_RequestSamples (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_RequestSamples","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel","Output":"=== RUN TestOpenAIInputTokensEncodingForModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-5"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-5","Output":"=== RUN TestOpenAIInputTokensEncodingForModel/gpt-5\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-5","Output":"--- PASS: TestOpenAIInputTokensEncodingForModel/gpt-5 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-5","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-5.3-codex"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-5.3-codex","Output":"=== RUN TestOpenAIInputTokensEncodingForModel/gpt-5.3-codex\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-5.3-codex","Output":"--- PASS: TestOpenAIInputTokensEncodingForModel/gpt-5.3-codex (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-5.3-codex","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-4o-mini"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-4o-mini","Output":"=== RUN TestOpenAIInputTokensEncodingForModel/gpt-4o-mini\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-4o-mini","Output":"--- PASS: TestOpenAIInputTokensEncodingForModel/gpt-4o-mini (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-4o-mini","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-4.1"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-4.1","Output":"=== RUN TestOpenAIInputTokensEncodingForModel/gpt-4.1\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-4.1","Output":"--- PASS: TestOpenAIInputTokensEncodingForModel/gpt-4.1 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-4.1","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-4-turbo"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-4-turbo","Output":"=== RUN TestOpenAIInputTokensEncodingForModel/gpt-4-turbo\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-4-turbo","Output":"--- PASS: TestOpenAIInputTokensEncodingForModel/gpt-4-turbo (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-4-turbo","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-3.5-turbo"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-3.5-turbo","Output":"=== RUN TestOpenAIInputTokensEncodingForModel/gpt-3.5-turbo\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-3.5-turbo","Output":"--- PASS: TestOpenAIInputTokensEncodingForModel/gpt-3.5-turbo (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-3.5-turbo","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel","Output":"--- PASS: TestOpenAIInputTokensEncodingForModel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_CompareWithOpenAIAPI"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_CompareWithOpenAIAPI","Output":"=== RUN TestEstimateOpenAIInputTokens_CompareWithOpenAIAPI\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_CompareWithOpenAIAPI","Output":" openai_gateway_count_tokens_test.go:314: OPENAI_API_KEY not set\n"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_CompareWithOpenAIAPI","Output":"--- SKIP: TestEstimateOpenAIInputTokens_CompareWithOpenAIAPI (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"skip","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_CompareWithOpenAIAPI","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughFlushesAtCompleteEventBoundaries"}
- {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughFlushesAtCompleteEventBoundaries","Output":"=== RUN TestOpenAIStreamingPassthroughFlushesAtCompleteEventBoundaries\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughFlushesAtCompleteEventBoundaries","Output":"--- PASS: TestOpenAIStreamingPassthroughFlushesAtCompleteEventBoundaries (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughFlushesAtCompleteEventBoundaries","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughKeepsPreamblePendingUntilFirstOutputBoundary"}
- {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughKeepsPreamblePendingUntilFirstOutputBoundary","Output":"=== RUN TestOpenAIStreamingPassthroughKeepsPreamblePendingUntilFirstOutputBoundary\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughKeepsPreamblePendingUntilFirstOutputBoundary","Output":"--- PASS: TestOpenAIStreamingPassthroughKeepsPreamblePendingUntilFirstOutputBoundary (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughKeepsPreamblePendingUntilFirstOutputBoundary","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughFlushesTerminalEventAtEOFWithoutBlankLine"}
- {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughFlushesTerminalEventAtEOFWithoutBlankLine","Output":"=== RUN TestOpenAIStreamingPassthroughFlushesTerminalEventAtEOFWithoutBlankLine\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughFlushesTerminalEventAtEOFWithoutBlankLine","Output":"--- PASS: TestOpenAIStreamingPassthroughFlushesTerminalEventAtEOFWithoutBlankLine (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughFlushesTerminalEventAtEOFWithoutBlankLine","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughFailedBeforeOutputCanStillFailOverWithoutFlush"}
- {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughFailedBeforeOutputCanStillFailOverWithoutFlush","Output":"=== RUN TestOpenAIStreamingPassthroughFailedBeforeOutputCanStillFailOverWithoutFlush\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughFailedBeforeOutputCanStillFailOverWithoutFlush","Output":"--- PASS: TestOpenAIStreamingPassthroughFailedBeforeOutputCanStillFailOverWithoutFlush (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughFailedBeforeOutputCanStillFailOverWithoutFlush","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughNonRetryableFailedBeforeOutputFlushesAtBoundary"}
- {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughNonRetryableFailedBeforeOutputFlushesAtBoundary","Output":"=== RUN TestOpenAIStreamingPassthroughNonRetryableFailedBeforeOutputFlushesAtBoundary\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughNonRetryableFailedBeforeOutputFlushesAtBoundary","Output":"--- PASS: TestOpenAIStreamingPassthroughNonRetryableFailedBeforeOutputFlushesAtBoundary (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughNonRetryableFailedBeforeOutputFlushesAtBoundary","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughBareErrorTerminatesBeforeDone"}
- {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughBareErrorTerminatesBeforeDone","Output":"=== RUN TestOpenAIStreamingPassthroughBareErrorTerminatesBeforeDone\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughBareErrorTerminatesBeforeDone","Output":"--- PASS: TestOpenAIStreamingPassthroughBareErrorTerminatesBeforeDone (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughBareErrorTerminatesBeforeDone","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughBareErrorDrainsAuthoritativeFailedUsage"}
- {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughBareErrorDrainsAuthoritativeFailedUsage","Output":"=== RUN TestOpenAIStreamingPassthroughBareErrorDrainsAuthoritativeFailedUsage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughBareErrorDrainsAuthoritativeFailedUsage","Output":"--- PASS: TestOpenAIStreamingPassthroughBareErrorDrainsAuthoritativeFailedUsage (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughBareErrorDrainsAuthoritativeFailedUsage","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughFailedAfterOutputFlushesAtBoundaryAndKeepsUsage"}
- {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughFailedAfterOutputFlushesAtBoundaryAndKeepsUsage","Output":"=== RUN TestOpenAIStreamingPassthroughFailedAfterOutputFlushesAtBoundaryAndKeepsUsage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughFailedAfterOutputFlushesAtBoundaryAndKeepsUsage","Output":"--- PASS: TestOpenAIStreamingPassthroughFailedAfterOutputFlushesAtBoundaryAndKeepsUsage (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughFailedAfterOutputFlushesAtBoundaryAndKeepsUsage","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughClientDisconnectStillDrainsTerminalUsage"}
- {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughClientDisconnectStillDrainsTerminalUsage","Output":"=== RUN TestOpenAIStreamingPassthroughClientDisconnectStillDrainsTerminalUsage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughClientDisconnectStillDrainsTerminalUsage","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.045Z\",\"msg\":\"[OpenAI passthrough] Client disconnected during streaming, continue draining upstream for usage: account=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughClientDisconnectStillDrainsTerminalUsage","Output":"--- PASS: TestOpenAIStreamingPassthroughClientDisconnectStillDrainsTerminalUsage (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughClientDisconnectStillDrainsTerminalUsage","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughScannerErrorFlushesWrittenResidual"}
- {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughScannerErrorFlushesWrittenResidual","Output":"=== RUN TestOpenAIStreamingPassthroughScannerErrorFlushesWrittenResidual\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughScannerErrorFlushesWrittenResidual","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:38:40.045Z\",\"msg\":\"[OpenAI passthrough] 流读取异常中断: account=1 request_id= err=upstream read failed\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).handleStreamingResponsePassthrough\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_passthrough.go:2232\\ngithub.com/Wei-Shaw/sub2api/internal/service.runPassthroughFlushTest\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_passthrough_flush_test.go:95\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIStreamingPassthroughScannerErrorFlushesWrittenResidual\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_passthrough_flush_test.go:277\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughScannerErrorFlushesWrittenResidual","Output":"--- PASS: TestOpenAIStreamingPassthroughScannerErrorFlushesWrittenResidual (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughScannerErrorFlushesWrittenResidual","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughNamespaceRestoreErrorFlushesWrittenResidualOnce"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughNamespaceRestoreErrorFlushesWrittenResidualOnce","Output":"=== RUN TestOpenAIStreamingPassthroughNamespaceRestoreErrorFlushesWrittenResidualOnce\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughNamespaceRestoreErrorFlushesWrittenResidualOnce","Output":"--- PASS: TestOpenAIStreamingPassthroughNamespaceRestoreErrorFlushesWrittenResidualOnce (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughNamespaceRestoreErrorFlushesWrittenResidualOnce","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughBlankWriteFailureDoesNotFlushAndStillDrainsUsage"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughBlankWriteFailureDoesNotFlushAndStillDrainsUsage","Output":"=== RUN TestOpenAIStreamingPassthroughBlankWriteFailureDoesNotFlushAndStillDrainsUsage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughBlankWriteFailureDoesNotFlushAndStillDrainsUsage","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.045Z\",\"msg\":\"[OpenAI passthrough] Client disconnected during streaming, continue draining upstream for usage: account=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughBlankWriteFailureDoesNotFlushAndStillDrainsUsage","Output":"--- PASS: TestOpenAIStreamingPassthroughBlankWriteFailureDoesNotFlushAndStillDrainsUsage (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughBlankWriteFailureDoesNotFlushAndStillDrainsUsage","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling/disabled_group_rejects_before_upstream"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling/disabled_group_rejects_before_upstream","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling/disabled_group_rejects_before_upstream\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling/disabled_group_rejects_before_upstream","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling/disabled_group_rejects_before_upstream (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling/disabled_group_rejects_before_upstream","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling/allowed_group_keeps_image_billing"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling/allowed_group_keeps_image_billing","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling/allowed_group_keeps_image_billing\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling/allowed_group_keeps_image_billing","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.045Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=5151 name=openai-image-controls type=apikey model=gpt-5.4 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling/allowed_group_keeps_image_billing","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.045Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":5151,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling/allowed_group_keeps_image_billing","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling/allowed_group_keeps_image_billing (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling/allowed_group_keeps_image_billing","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_RejectsNilInput"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_RejectsNilInput","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_RejectsNilInput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_RejectsNilInput","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_RejectsNilInput (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_RejectsNilInput","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ZeroUsageStillWritesUsageLog"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ZeroUsageStillWritesUsageLog","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_ZeroUsageStillWritesUsageLog\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ZeroUsageStillWritesUsageLog","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.045Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ZeroUsageStillWritesUsageLog","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.045Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ZeroUsageStillWritesUsageLog","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_ZeroUsageStillWritesUsageLog (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ZeroUsageStillWritesUsageLog","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_MissingPricingRecordsZeroCostUsageLog"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_MissingPricingRecordsZeroCostUsageLog","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_MissingPricingRecordsZeroCostUsageLog\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_MissingPricingRecordsZeroCostUsageLog","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.045Z\",\"logger\":\"slog\",\"msg\":\"notifyBalanceLow: skipped\",\"service\":\"sub2api\",\"env\":\"test\",\"is_subscription\":false,\"actual_cost\":0,\"user_nil\":false,\"service_nil\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_MissingPricingRecordsZeroCostUsageLog","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.045Z\",\"logger\":\"slog\",\"msg\":\"notifyAccountQuota: skipped\",\"service\":\"sub2api\",\"env\":\"test\",\"total_cost\":0,\"account_nil\":false,\"is_apikey_or_bedrock\":true,\"service_nil\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_MissingPricingRecordsZeroCostUsageLog","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.045Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_MissingPricingRecordsZeroCostUsageLog","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.045Z\",\"msg\":\"openai_usage.pricing_missing_record_zero_cost\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"billing_models\":[\"pricing-missing-test-model\"],\"requested_model\":\"\",\"mapped_model\":\"\",\"upstream_model\":\"\",\"api_key_id\":1002,\"account_id\":3002,\"error\":\"calculate OpenAI usage cost failed for billing models pricing-missing-test-model: pricing not found for model: pricing-missing-test-model\"}\n"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_MissingPricingRecordsZeroCostUsageLog","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_MissingPricingRecordsZeroCostUsageLog (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_MissingPricingRecordsZeroCostUsageLog","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.045Z\",\"logger\":\"slog\",\"msg\":\"notifyBalanceLow: skipped\",\"service\":\"sub2api\",\"env\":\"test\",\"is_subscription\":false,\"actual_cost\":0,\"user_nil\":false,\"service_nil\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesUserSpecificGroupRate"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesUserSpecificGroupRate","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_UsesUserSpecificGroupRate\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesUserSpecificGroupRate","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.045Z\",\"logger\":\"slog\",\"msg\":\"notifyAccountQuota: skipped\",\"service\":\"sub2api\",\"env\":\"test\",\"total_cost\":0,\"account_nil\":false,\"is_apikey_or_bedrock\":true,\"service_nil\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesUserSpecificGroupRate","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.045Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesUserSpecificGroupRate","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.045Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesUserSpecificGroupRate","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_UsesUserSpecificGroupRate (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesUserSpecificGroupRate","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PeakRateAffectsTokenModeImageOutputTokens"}
- {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PeakRateAffectsTokenModeImageOutputTokens","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_PeakRateAffectsTokenModeImageOutputTokens\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PeakRateAffectsTokenModeImageOutputTokens","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.046Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PeakRateAffectsTokenModeImageOutputTokens","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.046Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PeakRateAffectsTokenModeImageOutputTokens","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_PeakRateAffectsTokenModeImageOutputTokens (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PeakRateAffectsTokenModeImageOutputTokens","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_TimePricingUsesPricingAt"}
- {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_TimePricingUsesPricingAt","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_TimePricingUsesPricingAt\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_TimePricingUsesPricingAt","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.046Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_TimePricingUsesPricingAt","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.046Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_TimePricingUsesPricingAt","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_TimePricingUsesPricingAt (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_TimePricingUsesPricingAt","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_TimePricingUsesExplicitPricingAt"}
- {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_TimePricingUsesExplicitPricingAt","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_TimePricingUsesExplicitPricingAt\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_TimePricingUsesExplicitPricingAt","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.046Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_TimePricingUsesExplicitPricingAt","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.046Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_TimePricingUsesExplicitPricingAt","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_TimePricingUsesExplicitPricingAt (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_TimePricingUsesExplicitPricingAt","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel"}
- {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-flash/peak"}
- {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-flash/peak","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-flash/peak\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-flash/peak","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.046Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-flash/peak","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.046Z\",\"logger\":\"slog\",\"msg\":\"failed to get model pricing from LiteLLM, using fallback\",\"service\":\"sub2api\",\"env\":\"test\",\"model\":\"customer-chat\",\"error\":\"pricing not found for model: customer-chat\"}\n"}
- {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-flash/peak","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.046Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: deepseek-v4-flash\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-flash/peak","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-flash/peak (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-flash/peak","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-flash/off_peak"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-flash/off_peak","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-flash/off_peak\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-flash/off_peak","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.046Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-flash/off_peak","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.046Z\",\"logger\":\"slog\",\"msg\":\"failed to get model pricing from LiteLLM, using fallback\",\"service\":\"sub2api\",\"env\":\"test\",\"model\":\"customer-chat\",\"error\":\"pricing not found for model: customer-chat\"}\n"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-flash/off_peak","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.046Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: deepseek-v4-flash\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-flash/off_peak","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-flash/off_peak (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-flash/off_peak","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-pro/peak"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-pro/peak","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-pro/peak\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-pro/peak","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.046Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-pro/peak","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.046Z\",\"logger\":\"slog\",\"msg\":\"failed to get model pricing from LiteLLM, using fallback\",\"service\":\"sub2api\",\"env\":\"test\",\"model\":\"customer-chat\",\"error\":\"pricing not found for model: customer-chat\"}\n"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-pro/peak","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.046Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: deepseek-v4-pro\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-pro/peak","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-pro/peak (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-pro/peak","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-pro/off_peak"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-pro/off_peak","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-pro/off_peak\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-pro/off_peak","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.046Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-pro/off_peak","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.046Z\",\"logger\":\"slog\",\"msg\":\"failed to get model pricing from LiteLLM, using fallback\",\"service\":\"sub2api\",\"env\":\"test\",\"model\":\"customer-chat\",\"error\":\"pricing not found for model: customer-chat\"}\n"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-pro/off_peak","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.046Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: deepseek-v4-pro\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-pro/off_peak","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-pro/off_peak (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-pro/off_peak","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_IncludesEndpointMetadata"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_IncludesEndpointMetadata","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_IncludesEndpointMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_IncludesEndpointMetadata","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.046Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_IncludesEndpointMetadata","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.046Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_IncludesEndpointMetadata","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_IncludesEndpointMetadata (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_IncludesEndpointMetadata","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateOnResolverError"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateOnResolverError","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateOnResolverError\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateOnResolverError","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.046Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateOnResolverError","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:38:40.046Z\",\"msg\":\"get user group rate failed, fallback to group default: user=2002 group=12 err=db unavailable\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway.test\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.(*userGroupRateResolver).Resolve\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/user_group_rate_resolver.go:93\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).ResolveUserGroupRateMultiplier\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_usage.go:123\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).RecordUsage\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_usage.go:202\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateOnResolverError\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/servi"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateOnResolverError","Output":"ce/openai_gateway_record_usage_test.go:687\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateOnResolverError","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.046Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateOnResolverError","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateOnResolverError (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateOnResolverError","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateWhenResolverMissing"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateWhenResolverMissing","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateWhenResolverMissing\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateWhenResolverMissing","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.046Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateWhenResolverMissing","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.046Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateWhenResolverMissing","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateWhenResolverMissing (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateWhenResolverMissing","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DuplicateUsageLogSkipsBilling"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DuplicateUsageLogSkipsBilling","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_DuplicateUsageLogSkipsBilling\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DuplicateUsageLogSkipsBilling","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.046Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DuplicateUsageLogSkipsBilling","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.046Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DuplicateUsageLogSkipsBilling","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_DuplicateUsageLogSkipsBilling (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DuplicateUsageLogSkipsBilling","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DuplicateBillingKeySkipsBillingWithRepo"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DuplicateBillingKeySkipsBillingWithRepo","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_DuplicateBillingKeySkipsBillingWithRepo\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DuplicateBillingKeySkipsBillingWithRepo","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.046Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DuplicateBillingKeySkipsBillingWithRepo","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.046Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DuplicateBillingKeySkipsBillingWithRepo","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_DuplicateBillingKeySkipsBillingWithRepo (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DuplicateBillingKeySkipsBillingWithRepo","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsWhenUsageLogCreateReturnsError"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsWhenUsageLogCreateReturnsError","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_BillsWhenUsageLogCreateReturnsError\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsWhenUsageLogCreateReturnsError","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsWhenUsageLogCreateReturnsError","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsWhenUsageLogCreateReturnsError","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"Create usage log failed: usage log batch state uncertain\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.writeUsageLogBestEffort\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/gateway_usage_billing.go:595\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).RecordUsage\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_usage.go:514\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGatewayServiceRecordUsage_BillsWhenUsageLogCreateReturnsError\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_record_usage_test.go:821\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsWhenUsageLogCreateReturnsError","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_BillsWhenUsageLogCreateReturnsError (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsWhenUsageLogCreateReturnsError","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsageLogWriteErrorDoesNotSkipBilling"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsageLogWriteErrorDoesNotSkipBilling","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_UsageLogWriteErrorDoesNotSkipBilling\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsageLogWriteErrorDoesNotSkipBilling","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsageLogWriteErrorDoesNotSkipBilling","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsageLogWriteErrorDoesNotSkipBilling","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"Create usage log failed: context canceled\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.writeUsageLogBestEffort\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/gateway_usage_billing.go:595\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).RecordUsage\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_usage.go:514\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGatewayServiceRecordUsage_UsageLogWriteErrorDoesNotSkipBilling\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_record_usage_test.go:846\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsageLogWriteErrorDoesNotSkipBilling","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_UsageLogWriteErrorDoesNotSkipBilling (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsageLogWriteErrorDoesNotSkipBilling","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingUsesDetachedContext"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingUsesDetachedContext","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_BillingUsesDetachedContext\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingUsesDetachedContext","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingUsesDetachedContext","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingUsesDetachedContext","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"Create usage log failed: context deadline exceeded\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.writeUsageLogBestEffort\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/gateway_usage_billing.go:595\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).RecordUsage\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_usage.go:514\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGatewayServiceRecordUsage_BillingUsesDetachedContext\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_record_usage_test.go:883\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingUsesDetachedContext","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_BillingUsesDetachedContext (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingUsesDetachedContext","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingRepoUsesDetachedContext"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingRepoUsesDetachedContext","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_BillingRepoUsesDetachedContext\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingRepoUsesDetachedContext","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingRepoUsesDetachedContext","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingRepoUsesDetachedContext","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_BillingRepoUsesDetachedContext (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingRepoUsesDetachedContext","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingFingerprintIncludesRequestPayloadHash"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingFingerprintIncludesRequestPayloadHash","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_BillingFingerprintIncludesRequestPayloadHash\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingFingerprintIncludesRequestPayloadHash","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"slog\",\"msg\":\"notifyBalanceLow: skipped\",\"service\":\"sub2api\",\"env\":\"test\",\"is_subscription\":false,\"actual_cost\":0.00008800000000000001,\"user_nil\":false,\"service_nil\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingFingerprintIncludesRequestPayloadHash","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"slog\",\"msg\":\"notifyAccountQuota: skipped\",\"service\":\"sub2api\",\"env\":\"test\",\"total_cost\":0.00008,\"account_nil\":false,\"is_apikey_or_bedrock\":false,\"service_nil\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingFingerprintIncludesRequestPayloadHash","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingFingerprintIncludesRequestPayloadHash","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingFingerprintIncludesRequestPayloadHash","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_BillingFingerprintIncludesRequestPayloadHash (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingFingerprintIncludesRequestPayloadHash","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"slog\",\"msg\":\"notifyBalanceLow: skipped\",\"service\":\"sub2api\",\"env\":\"test\",\"is_subscription\":false,\"actual_cost\":0.0001265,\"user_nil\":false,\"service_nil\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesFallbackRequestIDForBillingAndUsageLog"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesFallbackRequestIDForBillingAndUsageLog","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_UsesFallbackRequestIDForBillingAndUsageLog\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesFallbackRequestIDForBillingAndUsageLog","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"slog\",\"msg\":\"notifyAccountQuota: skipped\",\"service\":\"sub2api\",\"env\":\"test\",\"total_cost\":0.000115,\"account_nil\":false,\"is_apikey_or_bedrock\":false,\"service_nil\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesFallbackRequestIDForBillingAndUsageLog","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesFallbackRequestIDForBillingAndUsageLog","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesFallbackRequestIDForBillingAndUsageLog","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_UsesFallbackRequestIDForBillingAndUsageLog (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesFallbackRequestIDForBillingAndUsageLog","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"slog\",\"msg\":\"notifyBalanceLow: skipped\",\"service\":\"sub2api\",\"env\":\"test\",\"is_subscription\":false,\"actual_cost\":0.00008800000000000001,\"user_nil\":false,\"service_nil\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PrefersClientRequestIDOverUpstreamRequestID"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PrefersClientRequestIDOverUpstreamRequestID","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_PrefersClientRequestIDOverUpstreamRequestID\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PrefersClientRequestIDOverUpstreamRequestID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"slog\",\"msg\":\"notifyAccountQuota: skipped\",\"service\":\"sub2api\",\"env\":\"test\",\"total_cost\":0.00008,\"account_nil\":false,\"is_apikey_or_bedrock\":false,\"service_nil\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PrefersClientRequestIDOverUpstreamRequestID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PrefersClientRequestIDOverUpstreamRequestID","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PrefersClientRequestIDOverUpstreamRequestID","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_PrefersClientRequestIDOverUpstreamRequestID (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PrefersClientRequestIDOverUpstreamRequestID","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"slog\",\"msg\":\"notifyBalanceLow: skipped\",\"service\":\"sub2api\",\"env\":\"test\",\"is_subscription\":false,\"actual_cost\":0.00008800000000000001,\"user_nil\":false,\"service_nil\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_WSModePrefersUpstreamRequestIDOverClientRequestID"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_WSModePrefersUpstreamRequestIDOverClientRequestID","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_WSModePrefersUpstreamRequestIDOverClientRequestID\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_WSModePrefersUpstreamRequestIDOverClientRequestID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"slog\",\"msg\":\"notifyAccountQuota: skipped\",\"service\":\"sub2api\",\"env\":\"test\",\"total_cost\":0.00008,\"account_nil\":false,\"is_apikey_or_bedrock\":false,\"service_nil\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_WSModePrefersUpstreamRequestIDOverClientRequestID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_WSModePrefersUpstreamRequestIDOverClientRequestID","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_WSModePrefersUpstreamRequestIDOverClientRequestID","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_WSModePrefersUpstreamRequestIDOverClientRequestID (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_WSModePrefersUpstreamRequestIDOverClientRequestID","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GeneratesRequestIDWhenAllSourcesMissing"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GeneratesRequestIDWhenAllSourcesMissing","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_GeneratesRequestIDWhenAllSourcesMissing\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GeneratesRequestIDWhenAllSourcesMissing","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"slog\",\"msg\":\"notifyBalanceLow: skipped\",\"service\":\"sub2api\",\"env\":\"test\",\"is_subscription\":false,\"actual_cost\":0.00008800000000000001,\"user_nil\":false,\"service_nil\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GeneratesRequestIDWhenAllSourcesMissing","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"slog\",\"msg\":\"notifyAccountQuota: skipped\",\"service\":\"sub2api\",\"env\":\"test\",\"total_cost\":0.00008,\"account_nil\":false,\"is_apikey_or_bedrock\":false,\"service_nil\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GeneratesRequestIDWhenAllSourcesMissing","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GeneratesRequestIDWhenAllSourcesMissing","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GeneratesRequestIDWhenAllSourcesMissing","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_GeneratesRequestIDWhenAllSourcesMissing (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GeneratesRequestIDWhenAllSourcesMissing","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"slog\",\"msg\":\"notifyBalanceLow: skipped\",\"service\":\"sub2api\",\"env\":\"test\",\"is_subscription\":false,\"actual_cost\":0.00008800000000000001,\"user_nil\":false,\"service_nil\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingErrorWritesUnsettledUsageLog"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingErrorWritesUnsettledUsageLog","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_BillingErrorWritesUnsettledUsageLog\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingErrorWritesUnsettledUsageLog","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"slog\",\"msg\":\"notifyAccountQuota: skipped\",\"service\":\"sub2api\",\"env\":\"test\",\"total_cost\":0.00008,\"account_nil\":false,\"is_apikey_or_bedrock\":false,\"service_nil\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingErrorWritesUnsettledUsageLog","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingErrorWritesUnsettledUsageLog","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingErrorWritesUnsettledUsageLog","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_BillingErrorWritesUnsettledUsageLog (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingErrorWritesUnsettledUsageLog","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UpdatesAPIKeyQuotaWhenConfigured"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UpdatesAPIKeyQuotaWhenConfigured","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_UpdatesAPIKeyQuotaWhenConfigured\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UpdatesAPIKeyQuotaWhenConfigured","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UpdatesAPIKeyQuotaWhenConfigured","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UpdatesAPIKeyQuotaWhenConfigured","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_UpdatesAPIKeyQuotaWhenConfigured (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UpdatesAPIKeyQuotaWhenConfigured","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ClampsActualInputTokensToZero"}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ClampsActualInputTokensToZero","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_ClampsActualInputTokensToZero\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ClampsActualInputTokensToZero","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ClampsActualInputTokensToZero","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ClampsActualInputTokensToZero","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_ClampsActualInputTokensToZero (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ClampsActualInputTokensToZero","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GPT56SeparatesCacheWriteForBillingAndStats"}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GPT56SeparatesCacheWriteForBillingAndStats","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_GPT56SeparatesCacheWriteForBillingAndStats\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GPT56SeparatesCacheWriteForBillingAndStats","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GPT56SeparatesCacheWriteForBillingAndStats","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_GPT56SeparatesCacheWriteForBillingAndStats (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GPT56SeparatesCacheWriteForBillingAndStats","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_Gpt54LongContextBillingDisabledWhenGroupAndAccountOff"}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_Gpt54LongContextBillingDisabledWhenGroupAndAccountOff","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_Gpt54LongContextBillingDisabledWhenGroupAndAccountOff\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_Gpt54LongContextBillingDisabledWhenGroupAndAccountOff","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_Gpt54LongContextBillingDisabledWhenGroupAndAccountOff","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.4-2026-03-05\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_Gpt54LongContextBillingDisabledWhenGroupAndAccountOff","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_Gpt54LongContextBillingDisabledWhenGroupAndAccountOff (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_Gpt54LongContextBillingDisabledWhenGroupAndAccountOff","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_Gpt54LongContextBillingEnabledPerAccount"}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_Gpt54LongContextBillingEnabledPerAccount","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_Gpt54LongContextBillingEnabledPerAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_Gpt54LongContextBillingEnabledPerAccount","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_Gpt54LongContextBillingEnabledPerAccount","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.4-2026-03-05 -\u003e gpt-5.4\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_Gpt54LongContextBillingEnabledPerAccount","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_Gpt54LongContextBillingEnabledPerAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_Gpt54LongContextBillingEnabledPerAccount","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows"}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_on_account_off"}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_on_account_off","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_on_account_off\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_on_account_off","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_on_account_off","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.4-2026-03-05 -\u003e gpt-5.4\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_on_account_off","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_on_account_off (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_on_account_off","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_off_account_on"}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_off_account_on","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_off_account_on\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_off_account_on","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_off_account_on","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.4-2026-03-05 -\u003e gpt-5.4\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_off_account_on","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_off_account_on (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_off_account_on","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_on_account_on"}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_on_account_on","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_on_account_on\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_on_account_on","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_on_account_on","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.4-2026-03-05 -\u003e gpt-5.4\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_on_account_on","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_on_account_on (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_on_account_on","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly/group_on_applies_the_official_ladder"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly/group_on_applies_the_official_ladder","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly/group_on_applies_the_official_ladder\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly/group_on_applies_the_official_ladder","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly/group_on_applies_the_official_ladder","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.048Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: grok-4.5\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly/group_on_applies_the_official_ladder","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly/group_on_applies_the_official_ladder (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly/group_on_applies_the_official_ladder","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly/group_off_keeps_the_base_card"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly/group_off_keeps_the_base_card","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly/group_off_keeps_the_base_card\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly/group_off_keeps_the_base_card","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly/group_off_keeps_the_base_card","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.048Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: grok-4.5\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly/group_off_keeps_the_base_card","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly/group_off_keeps_the_base_card (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly/group_off_keeps_the_base_card","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting/parent_opt_out_overrides_stale_enabled_shadow"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting/parent_opt_out_overrides_stale_enabled_shadow","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting/parent_opt_out_overrides_stale_enabled_shadow\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting/parent_opt_out_overrides_stale_enabled_shadow","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting/parent_opt_out_overrides_stale_enabled_shadow","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.4-2026-03-05 -\u003e gpt-5.4\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting/parent_opt_out_overrides_stale_enabled_shadow","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting/parent_opt_out_overrides_stale_enabled_shadow (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting/parent_opt_out_overrides_stale_enabled_shadow","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting/parent_opt_in_overrides_stale_disabled_shadow"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting/parent_opt_in_overrides_stale_disabled_shadow","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting/parent_opt_in_overrides_stale_disabled_shadow\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting/parent_opt_in_overrides_stale_disabled_shadow","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting/parent_opt_in_overrides_stale_disabled_shadow","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.4-2026-03-05 -\u003e gpt-5.4\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting/parent_opt_in_overrides_stale_disabled_shadow","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting/parent_opt_in_overrides_stale_disabled_shadow (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting/parent_opt_in_overrides_stale_disabled_shadow","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierPriorityUsesFastPricing"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierPriorityUsesFastPricing","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_ServiceTierPriorityUsesFastPricing\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierPriorityUsesFastPricing","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierPriorityUsesFastPricing","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.048Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.4\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierPriorityUsesFastPricing","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_ServiceTierPriorityUsesFastPricing (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierPriorityUsesFastPricing","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierFlexHalvesCost"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierFlexHalvesCost","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_ServiceTierFlexHalvesCost\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierFlexHalvesCost","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierFlexHalvesCost","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.048Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.4\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierFlexHalvesCost","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_ServiceTierFlexHalvesCost (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierFlexHalvesCost","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIServiceTier"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIServiceTier","Output":"=== RUN TestNormalizeOpenAIServiceTier\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIServiceTier/fast_maps_to_priority"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIServiceTier/fast_maps_to_priority","Output":"=== RUN TestNormalizeOpenAIServiceTier/fast_maps_to_priority\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIServiceTier/fast_maps_to_priority","Output":"--- PASS: TestNormalizeOpenAIServiceTier/fast_maps_to_priority (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIServiceTier/fast_maps_to_priority","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIServiceTier/openai_official_tiers_preserved"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIServiceTier/openai_official_tiers_preserved","Output":"=== RUN TestNormalizeOpenAIServiceTier/openai_official_tiers_preserved\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIServiceTier/openai_official_tiers_preserved","Output":"--- PASS: TestNormalizeOpenAIServiceTier/openai_official_tiers_preserved (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIServiceTier/openai_official_tiers_preserved","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIServiceTier/invalid_ignored"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIServiceTier/invalid_ignored","Output":"=== RUN TestNormalizeOpenAIServiceTier/invalid_ignored\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIServiceTier/invalid_ignored","Output":"--- PASS: TestNormalizeOpenAIServiceTier/invalid_ignored (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIServiceTier/invalid_ignored","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIServiceTier","Output":"--- PASS: TestNormalizeOpenAIServiceTier (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIServiceTier","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIServiceTier"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIServiceTier","Output":"=== RUN TestExtractOpenAIServiceTier\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIServiceTier","Output":"--- PASS: TestExtractOpenAIServiceTier (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIServiceTier","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIServiceTierFromBody"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIServiceTierFromBody","Output":"=== RUN TestExtractOpenAIServiceTierFromBody\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIServiceTierFromBody","Output":"--- PASS: TestExtractOpenAIServiceTierFromBody (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIServiceTierFromBody","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesRequestedModelAndUpstreamModelMetadataFields"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesRequestedModelAndUpstreamModelMetadataFields","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_UsesRequestedModelAndUpstreamModelMetadataFields\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesRequestedModelAndUpstreamModelMetadataFields","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesRequestedModelAndUpstreamModelMetadataFields","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.048Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1-codex\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesRequestedModelAndUpstreamModelMetadataFields","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_UsesRequestedModelAndUpstreamModelMetadataFields (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesRequestedModelAndUpstreamModelMetadataFields","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PersistsRequestedReasoningEffort"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PersistsRequestedReasoningEffort","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_PersistsRequestedReasoningEffort\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PersistsRequestedReasoningEffort","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PersistsRequestedReasoningEffort","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.048Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.4\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PersistsRequestedReasoningEffort","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_PersistsRequestedReasoningEffort (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PersistsRequestedReasoningEffort","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PreservesChannelMappedUpstreamModel"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PreservesChannelMappedUpstreamModel","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_PreservesChannelMappedUpstreamModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PreservesChannelMappedUpstreamModel","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PreservesChannelMappedUpstreamModel","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.048Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.6-terra\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PreservesChannelMappedUpstreamModel","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_PreservesChannelMappedUpstreamModel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PreservesChannelMappedUpstreamModel","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PreservesLoopedChannelAndAccountUpstreamModel"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PreservesLoopedChannelAndAccountUpstreamModel","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_PreservesLoopedChannelAndAccountUpstreamModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PreservesLoopedChannelAndAccountUpstreamModel","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PreservesLoopedChannelAndAccountUpstreamModel","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.048Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.6-terra\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PreservesLoopedChannelAndAccountUpstreamModel","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_PreservesLoopedChannelAndAccountUpstreamModel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PreservesLoopedChannelAndAccountUpstreamModel","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsMappedRequestsUsingRequestedModel"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsMappedRequestsUsingRequestedModel","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_BillsMappedRequestsUsingRequestedModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsMappedRequestsUsingRequestedModel","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsMappedRequestsUsingRequestedModel","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.048Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsMappedRequestsUsingRequestedModel","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_BillsMappedRequestsUsingRequestedModel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsMappedRequestsUsingRequestedModel","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelMappedDoesNotOverrideBillingModelWhenUnmapped"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelMappedDoesNotOverrideBillingModelWhenUnmapped","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_ChannelMappedDoesNotOverrideBillingModelWhenUnmapped\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelMappedDoesNotOverrideBillingModelWhenUnmapped","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelMappedDoesNotOverrideBillingModelWhenUnmapped","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.048Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelMappedDoesNotOverrideBillingModelWhenUnmapped","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_ChannelMappedDoesNotOverrideBillingModelWhenUnmapped (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelMappedDoesNotOverrideBillingModelWhenUnmapped","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelMappedOverridesBillingModelWhenMapped"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelMappedOverridesBillingModelWhenMapped","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_ChannelMappedOverridesBillingModelWhenMapped\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelMappedOverridesBillingModelWhenMapped","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelMappedOverridesBillingModelWhenMapped","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.048Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelMappedOverridesBillingModelWhenMapped","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_ChannelMappedOverridesBillingModelWhenMapped (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelMappedOverridesBillingModelWhenMapped","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource/upstream_uses_mapped_billing_model"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource/upstream_uses_mapped_billing_model","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource/upstream_uses_mapped_billing_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource/upstream_uses_mapped_billing_model","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource/upstream_uses_mapped_billing_model","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.048Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.5\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource/upstream_uses_mapped_billing_model","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource/upstream_uses_mapped_billing_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource/upstream_uses_mapped_billing_model","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource/requested_overrides_mapped_billing_model"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource/requested_overrides_mapped_billing_model","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource/requested_overrides_mapped_billing_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource/requested_overrides_mapped_billing_model","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource/requested_overrides_mapped_billing_model","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.048Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.4\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource/requested_overrides_mapped_billing_model","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource/requested_overrides_mapped_billing_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource/requested_overrides_mapped_billing_model","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsCompactOpenAIModelAlias"}
- {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsCompactOpenAIModelAlias","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_BillsCompactOpenAIModelAlias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsCompactOpenAIModelAlias","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsCompactOpenAIModelAlias","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.048Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.5\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsCompactOpenAIModelAlias","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.048Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt5.5\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsCompactOpenAIModelAlias","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_BillsCompactOpenAIModelAlias (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsCompactOpenAIModelAlias","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToUpstreamModelWhenPrimaryUnpriceable"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToUpstreamModelWhenPrimaryUnpriceable","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_FallsBackToUpstreamModelWhenPrimaryUnpriceable\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToUpstreamModelWhenPrimaryUnpriceable","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToUpstreamModelWhenPrimaryUnpriceable","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.048Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.4\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToUpstreamModelWhenPrimaryUnpriceable","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_FallsBackToUpstreamModelWhenPrimaryUnpriceable (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToUpstreamModelWhenPrimaryUnpriceable","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UnpricedTokenModelFallsBackToZeroCostUsageLog"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UnpricedTokenModelFallsBackToZeroCostUsageLog","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_UnpricedTokenModelFallsBackToZeroCostUsageLog\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UnpricedTokenModelFallsBackToZeroCostUsageLog","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UnpricedTokenModelFallsBackToZeroCostUsageLog","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"openai_usage.pricing_missing_record_zero_cost\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"billing_models\":[\"not-priceable-alias\"],\"requested_model\":\"\",\"mapped_model\":\"\",\"upstream_model\":\"\",\"api_key_id\":10,\"account_id\":30,\"error\":\"calculate OpenAI usage cost failed for billing models not-priceable-alias: pricing not found for model: not-priceable-alias\"}\n"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UnpricedTokenModelFallsBackToZeroCostUsageLog","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_UnpricedTokenModelFallsBackToZeroCostUsageLog (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UnpricedTokenModelFallsBackToZeroCostUsageLog","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SubscriptionBillingSetsSubscriptionFields"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SubscriptionBillingSetsSubscriptionFields","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_SubscriptionBillingSetsSubscriptionFields\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SubscriptionBillingSetsSubscriptionFields","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SubscriptionBillingSetsSubscriptionFields","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.049Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SubscriptionBillingSetsSubscriptionFields","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_SubscriptionBillingSetsSubscriptionFields (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SubscriptionBillingSetsSubscriptionFields","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SimpleModeSkipsBillingAfterPersist"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SimpleModeSkipsBillingAfterPersist","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_SimpleModeSkipsBillingAfterPersist\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SimpleModeSkipsBillingAfterPersist","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SimpleModeSkipsBillingAfterPersist","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.049Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SimpleModeSkipsBillingAfterPersist","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[SIMPLE MODE] Usage recorded (not billed): user=2000, tokens=15\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SimpleModeSkipsBillingAfterPersist","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_SimpleModeSkipsBillingAfterPersist (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SimpleModeSkipsBillingAfterPersist","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageOnlyUsageStillPersists"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageOnlyUsageStillPersists","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_ImageOnlyUsageStillPersists\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageOnlyUsageStillPersists","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageOnlyUsageStillPersists","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_ImageOnlyUsageStillPersists (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageOnlyUsageStillPersists","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_EmptyImageSizeDefaultsBeforeBillingAndPersistence"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_EmptyImageSizeDefaultsBeforeBillingAndPersistence","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_EmptyImageSizeDefaultsBeforeBillingAndPersistence\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_EmptyImageSizeDefaultsBeforeBillingAndPersistence","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_EmptyImageSizeDefaultsBeforeBillingAndPersistence","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_EmptyImageSizeDefaultsBeforeBillingAndPersistence (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_EmptyImageSizeDefaultsBeforeBillingAndPersistence","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_OutputImageSizeWinsBeforeBillingAndPersistence"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_OutputImageSizeWinsBeforeBillingAndPersistence","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_OutputImageSizeWinsBeforeBillingAndPersistence\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_OutputImageSizeWinsBeforeBillingAndPersistence","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_OutputImageSizeWinsBeforeBillingAndPersistence","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_OutputImageSizeWinsBeforeBillingAndPersistence (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_OutputImageSizeWinsBeforeBillingAndPersistence","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageUsesPerImageBillingEvenWithUsageTokens"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageUsesPerImageBillingEvenWithUsageTokens","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_ImageUsesPerImageBillingEvenWithUsageTokens\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageUsesPerImageBillingEvenWithUsageTokens","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageUsesPerImageBillingEvenWithUsageTokens","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_ImageUsesPerImageBillingEvenWithUsageTokens (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageUsesPerImageBillingEvenWithUsageTokens","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageSharedMultiplierPreservesExistingBehavior"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageSharedMultiplierPreservesExistingBehavior","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_ImageSharedMultiplierPreservesExistingBehavior\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageSharedMultiplierPreservesExistingBehavior","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageSharedMultiplierPreservesExistingBehavior","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_ImageSharedMultiplierPreservesExistingBehavior (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageSharedMultiplierPreservesExistingBehavior","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageSharedMultiplierUsesUserGroupOverride"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageSharedMultiplierUsesUserGroupOverride","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_ImageSharedMultiplierUsesUserGroupOverride\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageSharedMultiplierUsesUserGroupOverride","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageSharedMultiplierUsesUserGroupOverride","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_ImageSharedMultiplierUsesUserGroupOverride (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageSharedMultiplierUsesUserGroupOverride","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageIndependentMultiplierUsesImageRate"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageIndependentMultiplierUsesImageRate","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_ImageIndependentMultiplierUsesImageRate\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageIndependentMultiplierUsesImageRate","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageIndependentMultiplierUsesImageRate","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_ImageIndependentMultiplierUsesImageRate (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageIndependentMultiplierUsesImageRate","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokVideoUsesDefaultRateCard"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokVideoUsesDefaultRateCard","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_GrokVideoUsesDefaultRateCard\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokVideoUsesDefaultRateCard","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokVideoUsesDefaultRateCard","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_GrokVideoUsesDefaultRateCard (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokVideoUsesDefaultRateCard","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupImagePriceOverridesChannelImagePrice"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupImagePriceOverridesChannelImagePrice","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_GroupImagePriceOverridesChannelImagePrice\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupImagePriceOverridesChannelImagePrice","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupImagePriceOverridesChannelImagePrice","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_GroupImagePriceOverridesChannelImagePrice (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupImagePriceOverridesChannelImagePrice","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupVideoPriceOverridesChannelImagePrice"}
- {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupVideoPriceOverridesChannelImagePrice","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_GroupVideoPriceOverridesChannelImagePrice\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupVideoPriceOverridesChannelImagePrice","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupVideoPriceOverridesChannelImagePrice","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_GroupVideoPriceOverridesChannelImagePrice (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupVideoPriceOverridesChannelImagePrice","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupVideoModelPriceOverridesFlatAndChannelPrice"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupVideoModelPriceOverridesFlatAndChannelPrice","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_GroupVideoModelPriceOverridesFlatAndChannelPrice\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupVideoModelPriceOverridesFlatAndChannelPrice","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupVideoModelPriceOverridesFlatAndChannelPrice","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_GroupVideoModelPriceOverridesFlatAndChannelPrice (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupVideoModelPriceOverridesFlatAndChannelPrice","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_HydratesGroupImagePriceWhenAuthSnapshotOmitsIt"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_HydratesGroupImagePriceWhenAuthSnapshotOmitsIt","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_HydratesGroupImagePriceWhenAuthSnapshotOmitsIt\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_HydratesGroupImagePriceWhenAuthSnapshotOmitsIt","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_HydratesGroupImagePriceWhenAuthSnapshotOmitsIt","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_HydratesGroupImagePriceWhenAuthSnapshotOmitsIt (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_HydratesGroupImagePriceWhenAuthSnapshotOmitsIt","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_HydratesGroupVideoPriceWhenAuthSnapshotOmitsIt"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_HydratesGroupVideoPriceWhenAuthSnapshotOmitsIt","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_HydratesGroupVideoPriceWhenAuthSnapshotOmitsIt\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_HydratesGroupVideoPriceWhenAuthSnapshotOmitsIt","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_HydratesGroupVideoPriceWhenAuthSnapshotOmitsIt","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_HydratesGroupVideoPriceWhenAuthSnapshotOmitsIt (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_HydratesGroupVideoPriceWhenAuthSnapshotOmitsIt","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokVideoWithTokenChannelPricingKeepsVideoMetadata"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokVideoWithTokenChannelPricingKeepsVideoMetadata","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_GrokVideoWithTokenChannelPricingKeepsVideoMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokVideoWithTokenChannelPricingKeepsVideoMetadata","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokVideoWithTokenChannelPricingKeepsVideoMetadata","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.049Z\",\"logger\":\"slog\",\"msg\":\"failed to get model pricing from LiteLLM, using fallback\",\"service\":\"sub2api\",\"env\":\"test\",\"model\":\"grok-imagine-video\",\"error\":\"pricing not found for model: grok-imagine-video\"}\n"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokVideoWithTokenChannelPricingKeepsVideoMetadata","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.049Z\",\"logger\":\"slog\",\"msg\":\"failed to get model pricing from LiteLLM, using fallback\",\"service\":\"sub2api\",\"env\":\"test\",\"model\":\"grok-imagine-video\",\"error\":\"pricing not found for model: grok-imagine-video\"}\n"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokVideoWithTokenChannelPricingKeepsVideoMetadata","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_GrokVideoWithTokenChannelPricingKeepsVideoMetadata (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokVideoWithTokenChannelPricingKeepsVideoMetadata","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelImageBillingUsesImageCountAndSharedMultiplier"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelImageBillingUsesImageCountAndSharedMultiplier","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_ChannelImageBillingUsesImageCountAndSharedMultiplier\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelImageBillingUsesImageCountAndSharedMultiplier","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelImageBillingUsesImageCountAndSharedMultiplier","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_ChannelImageBillingUsesImageCountAndSharedMultiplier (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelImageBillingUsesImageCountAndSharedMultiplier","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelImageBillingUsesImageCountAndIndependentMultiplier"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelImageBillingUsesImageCountAndIndependentMultiplier","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_ChannelImageBillingUsesImageCountAndIndependentMultiplier\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelImageBillingUsesImageCountAndIndependentMultiplier","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelImageBillingUsesImageCountAndIndependentMultiplier","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_ChannelImageBillingUsesImageCountAndIndependentMultiplier (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelImageBillingUsesImageCountAndIndependentMultiplier","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierDowngradedByUpstreamResponse"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierDowngradedByUpstreamResponse","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_ServiceTierDowngradedByUpstreamResponse\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierDowngradedByUpstreamResponse","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierDowngradedByUpstreamResponse","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"logger\":\"slog\",\"msg\":\"billing.service_tier_downgraded\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"request_id\":\"resp_service_tier_downgraded\",\"requested_tier\":\"priority\",\"response_tier\":\"default\",\"billed_tier\":\"default\",\"platform\":\"openai\",\"account_id\":3017}\n"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierDowngradedByUpstreamResponse","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.049Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.4\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierDowngradedByUpstreamResponse","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_ServiceTierDowngradedByUpstreamResponse (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierDowngradedByUpstreamResponse","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/oauth"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/oauth","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/oauth\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/oauth","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/oauth","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.049Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.6-sol\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/oauth","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/oauth (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/oauth","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/setup-token"}
- {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/setup-token","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/setup-token\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/setup-token","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/setup-token","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.049Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.6-sol\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/setup-token","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/setup-token (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/setup-token","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ShadowUsesParentCredentialTierContract"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ShadowUsesParentCredentialTierContract","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_ShadowUsesParentCredentialTierContract\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ShadowUsesParentCredentialTierContract","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.050Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ShadowUsesParentCredentialTierContract","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.050Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.6-sol\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ShadowUsesParentCredentialTierContract","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_ShadowUsesParentCredentialTierContract (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ShadowUsesParentCredentialTierContract","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FreeOpenAIFastChargesStandard"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FreeOpenAIFastChargesStandard","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_FreeOpenAIFastChargesStandard\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FreeOpenAIFastChargesStandard","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.050Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FreeOpenAIFastChargesStandard","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.050Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.6-sol\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FreeOpenAIFastChargesStandard","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_FreeOpenAIFastChargesStandard (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FreeOpenAIFastChargesStandard","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGroupBillsOpenAIFastAtStandardRequiresOpenAIAccount"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGroupBillsOpenAIFastAtStandardRequiresOpenAIAccount","Output":"=== RUN TestGroupBillsOpenAIFastAtStandardRequiresOpenAIAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGroupBillsOpenAIFastAtStandardRequiresOpenAIAccount","Output":"--- PASS: TestGroupBillsOpenAIFastAtStandardRequiresOpenAIAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGroupBillsOpenAIFastAtStandardRequiresOpenAIAccount","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierNeverRaisedByUpstreamResponse"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierNeverRaisedByUpstreamResponse","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_ServiceTierNeverRaisedByUpstreamResponse\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierNeverRaisedByUpstreamResponse","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.050Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierNeverRaisedByUpstreamResponse","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.050Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.4\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierNeverRaisedByUpstreamResponse","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_ServiceTierNeverRaisedByUpstreamResponse (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierNeverRaisedByUpstreamResponse","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_ContentNull"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_ContentNull","Output":"=== RUN TestTrimOpenAIEncryptedReasoningItems_ContentNull\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_ContentNull","Output":"--- PASS: TestTrimOpenAIEncryptedReasoningItems_ContentNull (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_ContentNull","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_ContentNullOnly"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_ContentNullOnly","Output":"=== RUN TestTrimOpenAIEncryptedReasoningItems_ContentNullOnly\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_ContentNullOnly","Output":"--- PASS: TestTrimOpenAIEncryptedReasoningItems_ContentNullOnly (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_ContentNullOnly","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_ContentNonNull"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_ContentNonNull","Output":"=== RUN TestTrimOpenAIEncryptedReasoningItems_ContentNonNull\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_ContentNonNull","Output":"--- PASS: TestTrimOpenAIEncryptedReasoningItems_ContentNonNull (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_ContentNonNull","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_NoReasoningItems"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_NoReasoningItems","Output":"=== RUN TestTrimOpenAIEncryptedReasoningItems_NoReasoningItems\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_NoReasoningItems","Output":"--- PASS: TestTrimOpenAIEncryptedReasoningItems_NoReasoningItems (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_NoReasoningItems","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_Compaction"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_Compaction","Output":"=== RUN TestTrimOpenAIEncryptedReasoningItems_Compaction\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_Compaction/compaction"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_Compaction/compaction","Output":"=== RUN TestTrimOpenAIEncryptedReasoningItems_Compaction/compaction\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_Compaction/compaction","Output":"--- PASS: TestTrimOpenAIEncryptedReasoningItems_Compaction/compaction (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_Compaction/compaction","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_Compaction/compaction_summary"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_Compaction/compaction_summary","Output":"=== RUN TestTrimOpenAIEncryptedReasoningItems_Compaction/compaction_summary\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_Compaction/compaction_summary","Output":"--- PASS: TestTrimOpenAIEncryptedReasoningItems_Compaction/compaction_summary (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_Compaction/compaction_summary","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_Compaction/unencrypted_compaction"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_Compaction/unencrypted_compaction","Output":"=== RUN TestTrimOpenAIEncryptedReasoningItems_Compaction/unencrypted_compaction\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_Compaction/unencrypted_compaction","Output":"--- PASS: TestTrimOpenAIEncryptedReasoningItems_Compaction/unencrypted_compaction (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_Compaction/unencrypted_compaction","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_Compaction","Output":"--- PASS: TestTrimOpenAIEncryptedReasoningItems_Compaction (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_Compaction","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICrossModeFailoverReasoning_DropsWholeEncryptedItem"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICrossModeFailoverReasoning_DropsWholeEncryptedItem","Output":"=== RUN TestSanitizeOpenAICrossModeFailoverReasoning_DropsWholeEncryptedItem\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICrossModeFailoverReasoning_DropsWholeEncryptedItem","Output":"--- PASS: TestSanitizeOpenAICrossModeFailoverReasoning_DropsWholeEncryptedItem (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICrossModeFailoverReasoning_DropsWholeEncryptedItem","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICrossModeFailoverReasoning_NoEncryptedIsNoop"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICrossModeFailoverReasoning_NoEncryptedIsNoop","Output":"=== RUN TestSanitizeOpenAICrossModeFailoverReasoning_NoEncryptedIsNoop\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICrossModeFailoverReasoning_NoEncryptedIsNoop","Output":"--- PASS: TestSanitizeOpenAICrossModeFailoverReasoning_NoEncryptedIsNoop (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICrossModeFailoverReasoning_NoEncryptedIsNoop","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICrossModeFailoverReasoning_NoInputIsNoop"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICrossModeFailoverReasoning_NoInputIsNoop","Output":"=== RUN TestSanitizeOpenAICrossModeFailoverReasoning_NoInputIsNoop\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICrossModeFailoverReasoning_NoInputIsNoop","Output":"--- PASS: TestSanitizeOpenAICrossModeFailoverReasoning_NoInputIsNoop (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICrossModeFailoverReasoning_NoInputIsNoop","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICrossModeFailoverReasoning_PreservesLargeIntegers"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICrossModeFailoverReasoning_PreservesLargeIntegers","Output":"=== RUN TestSanitizeOpenAICrossModeFailoverReasoning_PreservesLargeIntegers\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICrossModeFailoverReasoning_PreservesLargeIntegers","Output":"--- PASS: TestSanitizeOpenAICrossModeFailoverReasoning_PreservesLargeIntegers (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICrossModeFailoverReasoning_PreservesLargeIntegers","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_ContentNullDropsBareSkeleton"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_ContentNullDropsBareSkeleton","Output":"=== RUN TestTrimOpenAIEncryptedReasoningItems_ContentNullDropsBareSkeleton\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_ContentNullDropsBareSkeleton","Output":"--- PASS: TestTrimOpenAIEncryptedReasoningItems_ContentNullDropsBareSkeleton (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_ContentNullDropsBareSkeleton","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplay"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplay","Output":"=== RUN TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplay\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplay","Output":"--- PASS: TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplay (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplay","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayRequiresExplicitStoreFalse"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayRequiresExplicitStoreFalse","Output":"=== RUN TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayRequiresExplicitStoreFalse\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayRequiresExplicitStoreFalse","Output":"--- PASS: TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayRequiresExplicitStoreFalse (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayRequiresExplicitStoreFalse","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayKnownCompactMode"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayKnownCompactMode","Output":"=== RUN TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayKnownCompactMode\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayKnownCompactMode","Output":"--- PASS: TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayKnownCompactMode (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayKnownCompactMode","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayRejectsEmptyEncryptedContent"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayRejectsEmptyEncryptedContent","Output":"=== RUN TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayRejectsEmptyEncryptedContent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayRejectsEmptyEncryptedContent","Output":"--- PASS: TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayRejectsEmptyEncryptedContent (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayRejectsEmptyEncryptedContent","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIParallelToolCallsWithoutTools"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIParallelToolCallsWithoutTools","Output":"=== RUN TestNormalizeOpenAIParallelToolCallsWithoutTools\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIParallelToolCallsWithoutTools","Output":"--- PASS: TestNormalizeOpenAIParallelToolCallsWithoutTools (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIParallelToolCallsWithoutTools","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount","Output":"=== RUN TestFilterOpenAIResponsesNoneReasoningEffortForAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount/custom_compatible_endpoint_strips_none_placeholders"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount/custom_compatible_endpoint_strips_none_placeholders","Output":"=== RUN TestFilterOpenAIResponsesNoneReasoningEffortForAccount/custom_compatible_endpoint_strips_none_placeholders\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount/custom_compatible_endpoint_strips_none_placeholders","Output":"--- PASS: TestFilterOpenAIResponsesNoneReasoningEffortForAccount/custom_compatible_endpoint_strips_none_placeholders (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount/custom_compatible_endpoint_strips_none_placeholders","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount/third-party_platform_keeps_other_reasoning_members"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount/third-party_platform_keeps_other_reasoning_members","Output":"=== RUN TestFilterOpenAIResponsesNoneReasoningEffortForAccount/third-party_platform_keeps_other_reasoning_members\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount/third-party_platform_keeps_other_reasoning_members","Output":"--- PASS: TestFilterOpenAIResponsesNoneReasoningEffortForAccount/third-party_platform_keeps_other_reasoning_members (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount/third-party_platform_keeps_other_reasoning_members","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount/non-none_effort_is_unchanged"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount/non-none_effort_is_unchanged","Output":"=== RUN TestFilterOpenAIResponsesNoneReasoningEffortForAccount/non-none_effort_is_unchanged\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount/non-none_effort_is_unchanged","Output":"--- PASS: TestFilterOpenAIResponsesNoneReasoningEffortForAccount/non-none_effort_is_unchanged (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount/non-none_effort_is_unchanged","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount/official_OpenAI_API_key_preserves_none"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount/official_OpenAI_API_key_preserves_none","Output":"=== RUN TestFilterOpenAIResponsesNoneReasoningEffortForAccount/official_OpenAI_API_key_preserves_none\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount/official_OpenAI_API_key_preserves_none","Output":"--- PASS: TestFilterOpenAIResponsesNoneReasoningEffortForAccount/official_OpenAI_API_key_preserves_none (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount/official_OpenAI_API_key_preserves_none","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount/OpenAI_OAuth_preserves_none"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount/OpenAI_OAuth_preserves_none","Output":"=== RUN TestFilterOpenAIResponsesNoneReasoningEffortForAccount/OpenAI_OAuth_preserves_none\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount/OpenAI_OAuth_preserves_none","Output":"--- PASS: TestFilterOpenAIResponsesNoneReasoningEffortForAccount/OpenAI_OAuth_preserves_none (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount/OpenAI_OAuth_preserves_none","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount","Output":"--- PASS: TestFilterOpenAIResponsesNoneReasoningEffortForAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount_APIKeyAutomaticPassthroughPreservesRequest"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount_APIKeyAutomaticPassthroughPreservesRequest","Output":"=== RUN TestFilterOpenAIResponsesNoneReasoningEffortForAccount_APIKeyAutomaticPassthroughPreservesRequest\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount_APIKeyAutomaticPassthroughPreservesRequest","Output":"--- PASS: TestFilterOpenAIResponsesNoneReasoningEffortForAccount_APIKeyAutomaticPassthroughPreservesRequest (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount_APIKeyAutomaticPassthroughPreservesRequest","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIParallelToolCallsWithoutTools_KeepsResponsesLiteAdditionalTools"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIParallelToolCallsWithoutTools_KeepsResponsesLiteAdditionalTools","Output":"=== RUN TestNormalizeOpenAIParallelToolCallsWithoutTools_KeepsResponsesLiteAdditionalTools\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIParallelToolCallsWithoutTools_KeepsResponsesLiteAdditionalTools","Output":"--- PASS: TestNormalizeOpenAIParallelToolCallsWithoutTools_KeepsResponsesLiteAdditionalTools (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIParallelToolCallsWithoutTools_KeepsResponsesLiteAdditionalTools","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningContentReplayStripsCrossProviderArray"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningContentReplayStripsCrossProviderArray","Output":"=== RUN TestNormalizeOpenAIResponsesReasoningContentReplayStripsCrossProviderArray\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningContentReplayStripsCrossProviderArray","Output":"--- PASS: TestNormalizeOpenAIResponsesReasoningContentReplayStripsCrossProviderArray (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningContentReplayStripsCrossProviderArray","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningContentReplayKeepsPortableShapes"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningContentReplayKeepsPortableShapes","Output":"=== RUN TestNormalizeOpenAIResponsesReasoningContentReplayKeepsPortableShapes\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningContentReplayKeepsPortableShapes","Output":"--- PASS: TestNormalizeOpenAIResponsesReasoningContentReplayKeepsPortableShapes (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningContentReplayKeepsPortableShapes","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBodyStripsReasoningContentOnlyForOpenAI"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBodyStripsReasoningContentOnlyForOpenAI","Output":"=== RUN TestNormalizeOpenAIResponsesWebSocketCompatibilityBodyStripsReasoningContentOnlyForOpenAI\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBodyStripsReasoningContentOnlyForOpenAI","Output":"--- PASS: TestNormalizeOpenAIResponsesWebSocketCompatibilityBodyStripsReasoningContentOnlyForOpenAI (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBodyStripsReasoningContentOnlyForOpenAI","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_SlowEventsFlushOnceAtBoundaries"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_SlowEventsFlushOnceAtBoundaries","Output":"=== RUN TestOpenAIResponseFlush_SlowEventsFlushOnceAtBoundaries\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_SlowEventsFlushOnceAtBoundaries","Output":"--- PASS: TestOpenAIResponseFlush_SlowEventsFlushOnceAtBoundaries (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_SlowEventsFlushOnceAtBoundaries","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_DataQueuedButBlankDrainsFlushesOnce"}
- {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_DataQueuedButBlankDrainsFlushesOnce","Output":"=== RUN TestOpenAIResponseFlush_DataQueuedButBlankDrainsFlushesOnce\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_DataQueuedButBlankDrainsFlushesOnce","Output":"--- PASS: TestOpenAIResponseFlush_DataQueuedButBlankDrainsFlushesOnce (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_DataQueuedButBlankDrainsFlushesOnce","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BurstDoesNotIncreaseFlushes"}
- {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BurstDoesNotIncreaseFlushes","Output":"=== RUN TestOpenAIResponseFlush_BurstDoesNotIncreaseFlushes\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BurstDoesNotIncreaseFlushes","Output":"--- PASS: TestOpenAIResponseFlush_BurstDoesNotIncreaseFlushes (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BurstDoesNotIncreaseFlushes","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_CommentAndEOFOnlyFlushCompleteResidual"}
- {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_CommentAndEOFOnlyFlushCompleteResidual","Output":"=== RUN TestOpenAIResponseFlush_CommentAndEOFOnlyFlushCompleteResidual\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_CommentAndEOFOnlyFlushCompleteResidual","Output":"--- PASS: TestOpenAIResponseFlush_CommentAndEOFOnlyFlushCompleteResidual (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_CommentAndEOFOnlyFlushCompleteResidual","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_TerminalReadErrorFlushesResidual"}
- {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_TerminalReadErrorFlushesResidual","Output":"=== RUN TestOpenAIResponseFlush_TerminalReadErrorFlushesResidual\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_TerminalReadErrorFlushesResidual","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.051Z\",\"msg\":\"Upstream scan ended after terminal event: unexpected EOF\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_TerminalReadErrorFlushesResidual","Output":"--- PASS: TestOpenAIResponseFlush_TerminalReadErrorFlushesResidual (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_TerminalReadErrorFlushesResidual","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_OutputWithoutTerminalFlushesResidualWithoutFailover"}
- {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_OutputWithoutTerminalFlushesResidualWithoutFailover","Output":"=== RUN TestOpenAIResponseFlush_OutputWithoutTerminalFlushesResidualWithoutFailover\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_OutputWithoutTerminalFlushesResidualWithoutFailover","Output":"--- PASS: TestOpenAIResponseFlush_OutputWithoutTerminalFlushesResidualWithoutFailover (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_OutputWithoutTerminalFlushesResidualWithoutFailover","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_PreambleWithoutTerminalRemainsBufferedForFailover"}
- {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_PreambleWithoutTerminalRemainsBufferedForFailover","Output":"=== RUN TestOpenAIResponseFlush_PreambleWithoutTerminalRemainsBufferedForFailover\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_PreambleWithoutTerminalRemainsBufferedForFailover","Output":"--- PASS: TestOpenAIResponseFlush_PreambleWithoutTerminalRemainsBufferedForFailover (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_PreambleWithoutTerminalRemainsBufferedForFailover","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_CanceledAfterOutputFlushesResidualWithoutErrorEvent"}
- {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_CanceledAfterOutputFlushesResidualWithoutErrorEvent","Output":"=== RUN TestOpenAIResponseFlush_CanceledAfterOutputFlushesResidualWithoutErrorEvent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_CanceledAfterOutputFlushesResidualWithoutErrorEvent","Output":"--- PASS: TestOpenAIResponseFlush_CanceledAfterOutputFlushesResidualWithoutErrorEvent (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_CanceledAfterOutputFlushesResidualWithoutErrorEvent","Elapsed":0}
- {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_KeepaliveFlushesImmediately"}
- {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_KeepaliveFlushesImmediately","Output":"=== RUN TestOpenAIResponseFlush_KeepaliveFlushesImmediately\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:41.0518822+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_KeepaliveFlushesImmediately","Output":"--- PASS: TestOpenAIResponseFlush_KeepaliveFlushesImmediately (1.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:41.0518822+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_KeepaliveFlushesImmediately","Elapsed":1}
- {"Time":"2026-09-12T11:38:41.0518822+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_KeepaliveDoesNotSplitOpenEvent"}
- {"Time":"2026-09-12T11:38:41.0518822+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_KeepaliveDoesNotSplitOpenEvent","Output":"=== RUN TestOpenAIResponseFlush_KeepaliveDoesNotSplitOpenEvent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_KeepaliveDoesNotSplitOpenEvent","Output":"--- PASS: TestOpenAIResponseFlush_KeepaliveDoesNotSplitOpenEvent (1.25s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_KeepaliveDoesNotSplitOpenEvent","Elapsed":1.25}
- {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries"}
- {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries","Output":"=== RUN TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/failed_at_EOF"}
- {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/failed_at_EOF","Output":"=== RUN TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/failed_at_EOF\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/failed_at_EOF","Output":"--- PASS: TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/failed_at_EOF (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/failed_at_EOF","Elapsed":0}
- {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/bare_error_synthesizes_failed_before_done"}
- {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/bare_error_synthesizes_failed_before_done","Output":"=== RUN TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/bare_error_synthesizes_failed_before_done\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/bare_error_synthesizes_failed_before_done","Output":"--- PASS: TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/bare_error_synthesizes_failed_before_done (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/bare_error_synthesizes_failed_before_done","Elapsed":0}
- {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/bare_error_forwards_following_failed_and_drains_terminal_usage"}
- {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/bare_error_forwards_following_failed_and_drains_terminal_usage","Output":"=== RUN TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/bare_error_forwards_following_failed_and_drains_terminal_usage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/bare_error_forwards_following_failed_and_drains_terminal_usage","Output":"--- PASS: TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/bare_error_forwards_following_failed_and_drains_terminal_usage (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/bare_error_forwards_following_failed_and_drains_terminal_usage","Elapsed":0}
- {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/non-retryable_error_event_flushes_at_boundary"}
- {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/non-retryable_error_event_flushes_at_boundary","Output":"=== RUN TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/non-retryable_error_event_flushes_at_boundary\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/non-retryable_error_event_flushes_at_boundary","Output":"--- PASS: TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/non-retryable_error_event_flushes_at_boundary (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/non-retryable_error_event_flushes_at_boundary","Elapsed":0}
- {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries","Output":"--- PASS: TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries","Elapsed":0}
- {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BareErrorFollowedByCompletedUsesCompletedTerminal"}
- {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BareErrorFollowedByCompletedUsesCompletedTerminal","Output":"=== RUN TestOpenAIResponseFlush_BareErrorFollowedByCompletedUsesCompletedTerminal\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BareErrorFollowedByCompletedUsesCompletedTerminal","Output":"--- PASS: TestOpenAIResponseFlush_BareErrorFollowedByCompletedUsesCompletedTerminal (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BareErrorFollowedByCompletedUsesCompletedTerminal","Elapsed":0}
- {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_CompatibleAPIKeyDoesNotUseCodexBareErrorSynthesis"}
- {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_CompatibleAPIKeyDoesNotUseCodexBareErrorSynthesis","Output":"=== RUN TestOpenAIResponseFlush_CompatibleAPIKeyDoesNotUseCodexBareErrorSynthesis\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_CompatibleAPIKeyDoesNotUseCodexBareErrorSynthesis","Output":"--- PASS: TestOpenAIResponseFlush_CompatibleAPIKeyDoesNotUseCodexBareErrorSynthesis (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:42.3028628+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_CompatibleAPIKeyDoesNotUseCodexBareErrorSynthesis","Elapsed":0}
- {"Time":"2026-09-12T11:38:42.3028628+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_RecentBareErrorAllowsCompletedBeforeIdleTimeout"}
- {"Time":"2026-09-12T11:38:42.3028628+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_RecentBareErrorAllowsCompletedBeforeIdleTimeout","Output":"=== RUN TestOpenAIResponseFlush_RecentBareErrorAllowsCompletedBeforeIdleTimeout\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:43.5037855+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_RecentBareErrorAllowsCompletedBeforeIdleTimeout","Output":"--- PASS: TestOpenAIResponseFlush_RecentBareErrorAllowsCompletedBeforeIdleTimeout (1.20s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:43.5037855+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_RecentBareErrorAllowsCompletedBeforeIdleTimeout","Elapsed":1.2}
- {"Time":"2026-09-12T11:38:43.5037855+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BareErrorTimeoutSynthesizesFailed"}
- {"Time":"2026-09-12T11:38:43.5037855+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BareErrorTimeoutSynthesizesFailed","Output":"=== RUN TestOpenAIResponseFlush_BareErrorTimeoutSynthesizesFailed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:43.5037855+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BareErrorTimeoutSynthesizesFailed/stream_interval_timeout"}
- {"Time":"2026-09-12T11:38:43.5037855+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BareErrorTimeoutSynthesizesFailed/stream_interval_timeout","Output":"=== RUN TestOpenAIResponseFlush_BareErrorTimeoutSynthesizesFailed/stream_interval_timeout\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:44.5040703+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BareErrorTimeoutSynthesizesFailed/stream_interval_timeout","Output":"--- PASS: TestOpenAIResponseFlush_BareErrorTimeoutSynthesizesFailed/stream_interval_timeout (1.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:44.5040703+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BareErrorTimeoutSynthesizesFailed/stream_interval_timeout","Elapsed":1}
- {"Time":"2026-09-12T11:38:44.5040703+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BareErrorTimeoutSynthesizesFailed/first_output_timeout"}
- {"Time":"2026-09-12T11:38:44.5040703+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BareErrorTimeoutSynthesizesFailed/first_output_timeout","Output":"=== RUN TestOpenAIResponseFlush_BareErrorTimeoutSynthesizesFailed/first_output_timeout\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BareErrorTimeoutSynthesizesFailed/first_output_timeout","Output":"--- PASS: TestOpenAIResponseFlush_BareErrorTimeoutSynthesizesFailed/first_output_timeout (1.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BareErrorTimeoutSynthesizesFailed/first_output_timeout","Elapsed":1}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BareErrorTimeoutSynthesizesFailed","Output":"--- PASS: TestOpenAIResponseFlush_BareErrorTimeoutSynthesizesFailed (2.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BareErrorTimeoutSynthesizesFailed","Elapsed":2}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_ReusedTypeKeepsSSEBytesAndTerminalSemantics"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_ReusedTypeKeepsSSEBytesAndTerminalSemantics","Output":"=== RUN TestOpenAIResponseFlush_ReusedTypeKeepsSSEBytesAndTerminalSemantics\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_ReusedTypeKeepsSSEBytesAndTerminalSemantics/whitespace_around_done"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_ReusedTypeKeepsSSEBytesAndTerminalSemantics/whitespace_around_done","Output":"=== RUN TestOpenAIResponseFlush_ReusedTypeKeepsSSEBytesAndTerminalSemantics/whitespace_around_done\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_ReusedTypeKeepsSSEBytesAndTerminalSemantics/whitespace_around_done","Output":"--- PASS: TestOpenAIResponseFlush_ReusedTypeKeepsSSEBytesAndTerminalSemantics/whitespace_around_done (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_ReusedTypeKeepsSSEBytesAndTerminalSemantics/whitespace_around_done","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_ReusedTypeKeepsSSEBytesAndTerminalSemantics/invalid_JSON_before_done"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_ReusedTypeKeepsSSEBytesAndTerminalSemantics/invalid_JSON_before_done","Output":"=== RUN TestOpenAIResponseFlush_ReusedTypeKeepsSSEBytesAndTerminalSemantics/invalid_JSON_before_done\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_ReusedTypeKeepsSSEBytesAndTerminalSemantics/invalid_JSON_before_done","Output":"--- PASS: TestOpenAIResponseFlush_ReusedTypeKeepsSSEBytesAndTerminalSemantics/invalid_JSON_before_done (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_ReusedTypeKeepsSSEBytesAndTerminalSemantics/invalid_JSON_before_done","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_ReusedTypeKeepsSSEBytesAndTerminalSemantics","Output":"--- PASS: TestOpenAIResponseFlush_ReusedTypeKeepsSSEBytesAndTerminalSemantics (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_ReusedTypeKeepsSSEBytesAndTerminalSemantics","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_ClientDisconnectStillDrainsUsage"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_ClientDisconnectStillDrainsUsage","Output":"=== RUN TestOpenAIResponseFlush_ClientDisconnectStillDrainsUsage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_ClientDisconnectStillDrainsUsage","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.504Z\",\"msg\":\"Client disconnected during streaming flush, continuing to drain upstream for billing\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_ClientDisconnectStillDrainsUsage","Output":"--- PASS: TestOpenAIResponseFlush_ClientDisconnectStillDrainsUsage (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_ClientDisconnectStillDrainsUsage","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_MergesHostedImageGenToolUsage"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_MergesHostedImageGenToolUsage","Output":"=== RUN TestExtractOpenAIUsageFromJSONBytes_MergesHostedImageGenToolUsage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_MergesHostedImageGenToolUsage","Output":"--- PASS: TestExtractOpenAIUsageFromJSONBytes_MergesHostedImageGenToolUsage (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_MergesHostedImageGenToolUsage","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_NonStreamingMergesImageGen"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_NonStreamingMergesImageGen","Output":"=== RUN TestExtractOpenAIUsageFromJSONBytes_NonStreamingMergesImageGen\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_NonStreamingMergesImageGen","Output":"--- PASS: TestExtractOpenAIUsageFromJSONBytes_NonStreamingMergesImageGen (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_NonStreamingMergesImageGen","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_NoToolUsageUnchanged"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_NoToolUsageUnchanged","Output":"=== RUN TestExtractOpenAIUsageFromJSONBytes_NoToolUsageUnchanged\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_NoToolUsageUnchanged","Output":"--- PASS: TestExtractOpenAIUsageFromJSONBytes_NoToolUsageUnchanged (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_NoToolUsageUnchanged","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_BaseUsageHasImageTokensNoOverride"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_BaseUsageHasImageTokensNoOverride","Output":"=== RUN TestExtractOpenAIUsageFromJSONBytes_BaseUsageHasImageTokensNoOverride\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_BaseUsageHasImageTokensNoOverride","Output":"--- PASS: TestExtractOpenAIUsageFromJSONBytes_BaseUsageHasImageTokensNoOverride (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_BaseUsageHasImageTokensNoOverride","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics","Output":"=== RUN TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/empty"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/empty","Output":"=== RUN TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/empty\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/empty","Output":"--- PASS: TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/empty (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/empty","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/whitespace"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/whitespace","Output":"=== RUN TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/whitespace\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/whitespace","Output":"--- PASS: TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/whitespace (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/whitespace","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/done"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/done","Output":"=== RUN TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/done\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/done","Output":"--- PASS: TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/done (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/done","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/JSON_outer_whitespace"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/JSON_outer_whitespace","Output":"=== RUN TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/JSON_outer_whitespace\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/JSON_outer_whitespace","Output":"--- PASS: TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/JSON_outer_whitespace (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/JSON_outer_whitespace","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/completed"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/completed","Output":"=== RUN TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/completed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/completed","Output":"--- PASS: TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/completed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/completed","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/response_done"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/response_done","Output":"=== RUN TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/response_done\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/response_done","Output":"--- PASS: TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/response_done (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/response_done","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/failed"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/failed","Output":"=== RUN TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/failed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/failed","Output":"--- PASS: TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/failed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/failed","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/incomplete"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/incomplete","Output":"=== RUN TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/incomplete\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/incomplete","Output":"--- PASS: TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/incomplete (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/incomplete","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/cancelled"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/cancelled","Output":"=== RUN TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/cancelled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/cancelled","Output":"--- PASS: TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/cancelled (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/cancelled","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/canceled"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/canceled","Output":"=== RUN TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/canceled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/canceled","Output":"--- PASS: TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/canceled (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/canceled","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/delta"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/delta","Output":"=== RUN TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/delta\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/delta","Output":"--- PASS: TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/delta (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/delta","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/invalid_JSON"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/invalid_JSON","Output":"=== RUN TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/invalid_JSON\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/invalid_JSON","Output":"--- PASS: TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/invalid_JSON (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/invalid_JSON","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/terminal_with_trailing_garbage"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/terminal_with_trailing_garbage","Output":"=== RUN TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/terminal_with_trailing_garbage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/terminal_with_trailing_garbage","Output":"--- PASS: TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/terminal_with_trailing_garbage (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/terminal_with_trailing_garbage","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/nonterminal_with_trailing_garbage"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/nonterminal_with_trailing_garbage","Output":"=== RUN TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/nonterminal_with_trailing_garbage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/nonterminal_with_trailing_garbage","Output":"--- PASS: TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/nonterminal_with_trailing_garbage (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/nonterminal_with_trailing_garbage","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/type_whitespace_is_normalized"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/type_whitespace_is_normalized","Output":"=== RUN TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/type_whitespace_is_normalized\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/type_whitespace_is_normalized","Output":"--- PASS: TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/type_whitespace_is_normalized (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/type_whitespace_is_normalized","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics","Output":"--- PASS: TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdaptOpenAIResponsesClientToolsLeavesNamespaceOnlyBodyUnchanged"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdaptOpenAIResponsesClientToolsLeavesNamespaceOnlyBodyUnchanged","Output":"=== RUN TestAdaptOpenAIResponsesClientToolsLeavesNamespaceOnlyBodyUnchanged\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdaptOpenAIResponsesClientToolsLeavesNamespaceOnlyBodyUnchanged","Output":"--- PASS: TestAdaptOpenAIResponsesClientToolsLeavesNamespaceOnlyBodyUnchanged (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdaptOpenAIResponsesClientToolsLeavesNamespaceOnlyBodyUnchanged","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdaptOpenAIResponsesClientToolsRejectsTrailingData"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdaptOpenAIResponsesClientToolsRejectsTrailingData","Output":"=== RUN TestAdaptOpenAIResponsesClientToolsRejectsTrailingData\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdaptOpenAIResponsesClientToolsRejectsTrailingData/trailing_garbage"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdaptOpenAIResponsesClientToolsRejectsTrailingData/trailing_garbage","Output":"=== RUN TestAdaptOpenAIResponsesClientToolsRejectsTrailingData/trailing_garbage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdaptOpenAIResponsesClientToolsRejectsTrailingData/trailing_garbage","Output":"--- PASS: TestAdaptOpenAIResponsesClientToolsRejectsTrailingData/trailing_garbage (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdaptOpenAIResponsesClientToolsRejectsTrailingData/trailing_garbage","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdaptOpenAIResponsesClientToolsRejectsTrailingData/second_JSON_document"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdaptOpenAIResponsesClientToolsRejectsTrailingData/second_JSON_document","Output":"=== RUN TestAdaptOpenAIResponsesClientToolsRejectsTrailingData/second_JSON_document\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdaptOpenAIResponsesClientToolsRejectsTrailingData/second_JSON_document","Output":"--- PASS: TestAdaptOpenAIResponsesClientToolsRejectsTrailingData/second_JSON_document (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdaptOpenAIResponsesClientToolsRejectsTrailingData/second_JSON_document","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdaptOpenAIResponsesClientToolsRejectsTrailingData","Output":"--- PASS: TestAdaptOpenAIResponsesClientToolsRejectsTrailingData (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdaptOpenAIResponsesClientToolsRejectsTrailingData","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClearOpenAIResponsesClientToolMappingRemovesStaleContextState"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClearOpenAIResponsesClientToolMappingRemovesStaleContextState","Output":"=== RUN TestClearOpenAIResponsesClientToolMappingRemovesStaleContextState\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClearOpenAIResponsesClientToolMappingRemovesStaleContextState","Output":"--- PASS: TestClearOpenAIResponsesClientToolMappingRemovesStaleContextState (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClearOpenAIResponsesClientToolMappingRemovesStaleContextState","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyRestoresClientToolsNonStreaming"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyRestoresClientToolsNonStreaming","Output":"=== RUN TestOpenAIPassthroughAPIKeyRestoresClientToolsNonStreaming\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyRestoresClientToolsNonStreaming","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.505Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=5659 name= type=apikey model=gpt-5.4 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyRestoresClientToolsNonStreaming","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.505Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":5659,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyRestoresClientToolsNonStreaming","Output":"--- PASS: TestOpenAIPassthroughAPIKeyRestoresClientToolsNonStreaming (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyRestoresClientToolsNonStreaming","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyPreservesCustomToolOutputContentParts"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyPreservesCustomToolOutputContentParts","Output":"=== RUN TestOpenAIPassthroughAPIKeyPreservesCustomToolOutputContentParts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyPreservesCustomToolOutputContentParts","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.505Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=6240 name= type=apikey model=gpt-5.4 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyPreservesCustomToolOutputContentParts","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.505Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":6240,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyPreservesCustomToolOutputContentParts","Output":"--- PASS: TestOpenAIPassthroughAPIKeyPreservesCustomToolOutputContentParts (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyPreservesCustomToolOutputContentParts","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyRestoresClientToolsStreaming"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyRestoresClientToolsStreaming","Output":"=== RUN TestOpenAIPassthroughAPIKeyRestoresClientToolsStreaming\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyRestoresClientToolsStreaming","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.505Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=5660 name= type=apikey model=gpt-5.4 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyRestoresClientToolsStreaming","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.505Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":5660,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyRestoresClientToolsStreaming","Output":"--- PASS: TestOpenAIPassthroughAPIKeyRestoresClientToolsStreaming (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyRestoresClientToolsStreaming","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector"}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector","Output":"=== RUN TestOpenAIGatewayService_GetCodexClientRestrictionDetector\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector/使用注入的_detector"}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector/使用注入的_detector","Output":"=== RUN TestOpenAIGatewayService_GetCodexClientRestrictionDetector/使用注入的_detector\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector/使用注入的_detector","Output":"--- PASS: TestOpenAIGatewayService_GetCodexClientRestrictionDetector/使用注入的_detector (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector/使用注入的_detector","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector/service_为_nil_时返回默认_detector"}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector/service_为_nil_时返回默认_detector","Output":"=== RUN TestOpenAIGatewayService_GetCodexClientRestrictionDetector/service_为_nil_时返回默认_detector\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector/service_为_nil_时返回默认_detector","Output":"--- PASS: TestOpenAIGatewayService_GetCodexClientRestrictionDetector/service_为_nil_时返回默认_detector (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector/service_为_nil_时返回默认_detector","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector/service_未注入_detector_时返回默认_detector"}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector/service_未注入_detector_时返回默认_detector","Output":"=== RUN TestOpenAIGatewayService_GetCodexClientRestrictionDetector/service_未注入_detector_时返回默认_detector\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector/service_未注入_detector_时返回默认_detector","Output":"--- PASS: TestOpenAIGatewayService_GetCodexClientRestrictionDetector/service_未注入_detector_时返回默认_detector (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector/service_未注入_detector_时返回默认_detector","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector","Output":"--- PASS: TestOpenAIGatewayService_GetCodexClientRestrictionDetector (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_VersionGateMessage"}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_VersionGateMessage","Output":"=== RUN TestOpenAIGatewayService_Forward_VersionGateMessage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_VersionGateMessage/版本太低:返回带版本号的差异化文案"}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_VersionGateMessage/版本太低:返回带版本号的差异化文案","Output":"=== RUN TestOpenAIGatewayService_Forward_VersionGateMessage/版本太低:返回带版本号的差异化文案\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_VersionGateMessage/版本太低:返回带版本号的差异化文案","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:45.505Z\",\"msg\":\"OpenAI codex_cli_only 拒绝非官方客户端请求\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":0,\"codex_cli_only_enabled\":true,\"codex_official_client_match\":false,\"reject_reason\":\"codex_version_too_low\",\"request_method\":\"POST\",\"request_path\":\"/v1/responses\",\"request_query\":\"\",\"request_host\":\"example.com\",\"request_client_ip\":\"192.0.2.1\",\"request_remote_addr\":\"192.0.2.1:1234\",\"request_user_agent\":\"\",\"request_content_type\":\"\",\"request_content_length\":0,\"request_stream\":false,\"request_model\":\"gpt-5.1-codex\",\"request_body_size\":25}\n"}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_VersionGateMessage/版本太低:返回带版本号的差异化文案","Output":"--- PASS: TestOpenAIGatewayService_Forward_VersionGateMessage/版本太低:返回带版本号的差异化文案 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_VersionGateMessage/版本太低:返回带版本号的差异化文案","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_VersionGateMessage/未命中官方:仍返回通用兜底文案"}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_VersionGateMessage/未命中官方:仍返回通用兜底文案","Output":"=== RUN TestOpenAIGatewayService_Forward_VersionGateMessage/未命中官方:仍返回通用兜底文案\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_VersionGateMessage/未命中官方:仍返回通用兜底文案","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:45.505Z\",\"msg\":\"OpenAI codex_cli_only 拒绝非官方客户端请求\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":0,\"codex_cli_only_enabled\":true,\"codex_official_client_match\":false,\"reject_reason\":\"official_client_user_agent_not_matched\",\"request_method\":\"POST\",\"request_path\":\"/v1/responses\",\"request_query\":\"\",\"request_host\":\"example.com\",\"request_client_ip\":\"192.0.2.1\",\"request_remote_addr\":\"192.0.2.1:1234\",\"request_user_agent\":\"\",\"request_content_type\":\"\",\"request_content_length\":0,\"request_stream\":false,\"request_model\":\"gpt-5.1-codex\",\"request_body_size\":25}\n"}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_VersionGateMessage/未命中官方:仍返回通用兜底文案","Output":"--- PASS: TestOpenAIGatewayService_Forward_VersionGateMessage/未命中官方:仍返回通用兜底文案 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_VersionGateMessage/未命中官方:仍返回通用兜底文案","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_VersionGateMessage","Output":"--- PASS: TestOpenAIGatewayService_Forward_VersionGateMessage (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_VersionGateMessage","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_NilSafety"}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_NilSafety","Output":"=== RUN TestLogCodexCLIOnlyDetection_NilSafety\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_NilSafety","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:45.505Z\",\"msg\":\"OpenAI codex_cli_only 拒绝非官方客户端请求\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":0,\"codex_cli_only_enabled\":true,\"codex_official_client_match\":false,\"reject_reason\":\"test\"}\n"}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_NilSafety","Output":"--- PASS: TestLogCodexCLIOnlyDetection_NilSafety (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_NilSafety","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_OnlyLogsRejected"}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_OnlyLogsRejected","Output":"=== RUN TestLogCodexCLIOnlyDetection_OnlyLogsRejected\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_OnlyLogsRejected","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.505Z\",\"msg\":\"OpenAI codex_cli_only 放行请求\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":1001,\"codex_cli_only_enabled\":true,\"codex_official_client_match\":true,\"reject_reason\":\"official_client_user_agent_matched\",\"api_key_id\":2002}\n"}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_OnlyLogsRejected","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:45.505Z\",\"msg\":\"OpenAI codex_cli_only 拒绝非官方客户端请求\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":1001,\"codex_cli_only_enabled\":true,\"codex_official_client_match\":false,\"reject_reason\":\"official_client_user_agent_not_matched\",\"api_key_id\":2002}\n"}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_OnlyLogsRejected","Output":"--- PASS: TestLogCodexCLIOnlyDetection_OnlyLogsRejected (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_OnlyLogsRejected","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_RejectedIncludesRequestDetails"}
- {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_RejectedIncludesRequestDetails","Output":"=== RUN TestLogCodexCLIOnlyDetection_RejectedIncludesRequestDetails\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_RejectedIncludesRequestDetails","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:45.505Z\",\"msg\":\"OpenAI codex_cli_only 拒绝非官方客户端请求\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":1001,\"codex_cli_only_enabled\":true,\"codex_official_client_match\":false,\"reject_reason\":\"official_client_user_agent_not_matched\",\"api_key_id\":2002,\"request_method\":\"POST\",\"request_path\":\"/v1/responses\",\"request_query\":\"trace=1\",\"request_host\":\"example.com\",\"request_client_ip\":\"203.0.113.42\",\"request_remote_addr\":\"172.18.0.1:54321\",\"request_user_agent\":\"codex_cli_rs/0.98.0 (Windows 10.0.19045; x86_64) unknown\",\"request_content_type\":\"application/json\",\"request_content_length\":0,\"request_stream\":false,\"request_model\":\"gpt-5.2\",\"request_prompt_cache_key_sha256\":\"a39ee25f645d9e4e\",\"request_headers\":{\"content-type\":\"application/json\",\"openai-beta\":\"assistants=v2\",\"user-agent\":\"codex_cli_rs/0.98.0 (Windows 10.0.19045; x86_64) unknown\",\"x-real-ip\":\"203.0.113.42\"},\"request_body_size\":133}\n"}
- {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_RejectedIncludesRequestDetails","Output":"--- PASS: TestLogCodexCLIOnlyDetection_RejectedIncludesRequestDetails (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_RejectedIncludesRequestDetails","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogOpenAIInstructionsRequiredDebug_LogsRequestDetails"}
- {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogOpenAIInstructionsRequiredDebug_LogsRequestDetails","Output":"=== RUN TestLogOpenAIInstructionsRequiredDebug_LogsRequestDetails\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogOpenAIInstructionsRequiredDebug_LogsRequestDetails","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:45.506Z\",\"msg\":\"OpenAI 上游返回 Instructions are required,已记录请求详情用于排查\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":1001,\"account_name\":\"codex max套餐\",\"upstream_status_code\":400,\"upstream_error_message\":\"Instructions are required\",\"request_user_agent\":\"curl/8.0\",\"codex_official_client_match\":false,\"request_method\":\"POST\",\"request_path\":\"/v1/responses\",\"request_query\":\"trace=1\",\"request_host\":\"example.com\",\"request_client_ip\":\"192.0.2.1\",\"request_remote_addr\":\"192.0.2.1:1234\",\"request_user_agent\":\"curl/8.0\",\"request_content_type\":\"application/json\",\"request_content_length\":0,\"request_stream\":false,\"request_model\":\"gpt-5.1-codex\",\"request_prompt_cache_key_sha256\":\"8a020cacc7f0ecfa\",\"request_headers\":{\"content-type\":\"application/json\",\"openai-beta\":\"assistants=v2\",\"user-agent\":\"curl/8.0\"},\"request_body_size\":139}\n"}
- {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogOpenAIInstructionsRequiredDebug_LogsRequestDetails","Output":"--- PASS: TestLogOpenAIInstructionsRequiredDebug_LogsRequestDetails (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogOpenAIInstructionsRequiredDebug_LogsRequestDetails","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogOpenAIInstructionsRequiredDebug_NonTargetErrorSkipped"}
- {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogOpenAIInstructionsRequiredDebug_NonTargetErrorSkipped","Output":"=== RUN TestLogOpenAIInstructionsRequiredDebug_NonTargetErrorSkipped\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogOpenAIInstructionsRequiredDebug_NonTargetErrorSkipped","Output":"--- PASS: TestLogOpenAIInstructionsRequiredDebug_NonTargetErrorSkipped (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogOpenAIInstructionsRequiredDebug_NonTargetErrorSkipped","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAITransientProcessingError"}
- {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAITransientProcessingError","Output":"=== RUN TestIsOpenAITransientProcessingError\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAITransientProcessingError","Output":"--- PASS: TestIsOpenAITransientProcessingError (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAITransientProcessingError","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIContextWindowError"}
- {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIContextWindowError","Output":"=== RUN TestIsOpenAIContextWindowError\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIContextWindowError","Output":"--- PASS: TestIsOpenAIContextWindowError (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIContextWindowError","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAITransientAndCapacityClassificationIgnoresEchoedJSON"}
- {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAITransientAndCapacityClassificationIgnoresEchoedJSON","Output":"=== RUN TestOpenAITransientAndCapacityClassificationIgnoresEchoedJSON\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAITransientAndCapacityClassificationIgnoresEchoedJSON","Output":"--- PASS: TestOpenAITransientAndCapacityClassificationIgnoresEchoedJSON (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAITransientAndCapacityClassificationIgnoresEchoedJSON","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFailoverOpenAIUpstreamResponseContextWindow502"}
- {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFailoverOpenAIUpstreamResponseContextWindow502","Output":"=== RUN TestShouldFailoverOpenAIUpstreamResponseContextWindow502\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFailoverOpenAIUpstreamResponseContextWindow502","Output":"--- PASS: TestShouldFailoverOpenAIUpstreamResponseContextWindow502 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFailoverOpenAIUpstreamResponseContextWindow502","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_LogsInstructionsRequiredDetails"}
- {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_LogsInstructionsRequiredDetails","Output":"=== RUN TestOpenAIGatewayService_Forward_LogsInstructionsRequiredDetails\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_LogsInstructionsRequiredDetails","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.506Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1001,\"final_model\":\"gpt-5.1-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_LogsInstructionsRequiredDetails","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:45.506Z\",\"msg\":\"OpenAI 上游返回 Instructions are required,已记录请求详情用于排查\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":1001,\"account_name\":\"codex max套餐\",\"upstream_status_code\":400,\"upstream_error_message\":\"Missing required parameter: 'instructions'\",\"request_user_agent\":\"codex_cli_rs/0.1.0\",\"codex_official_client_match\":true,\"request_method\":\"POST\",\"request_path\":\"/v1/responses\",\"request_query\":\"trace=1\",\"request_host\":\"example.com\",\"request_client_ip\":\"192.0.2.1\",\"request_remote_addr\":\"192.0.2.1:1234\",\"request_user_agent\":\"codex_cli_rs/0.1.0\",\"request_content_type\":\"application/json\",\"request_content_length\":0,\"request_stream\":false,\"request_model\":\"gpt-5.1-codex\",\"request_prompt_cache_key_sha256\":\"0be20a493c1428fd\",\"request_headers\":{\"content-type\":\"application/json\",\"openai-beta\":\"assistants=v2\",\"user-agent\":\"codex_cli_rs/0.1.0\"},\"request_body_size\":143}\n"}
- {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_LogsInstructionsRequiredDetails","Output":"--- PASS: TestOpenAIGatewayService_Forward_LogsInstructionsRequiredDetails (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_LogsInstructionsRequiredDetails","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TransientProcessingErrorTriggersFailover"}
- {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TransientProcessingErrorTriggersFailover","Output":"=== RUN TestOpenAIGatewayService_Forward_TransientProcessingErrorTriggersFailover\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TransientProcessingErrorTriggersFailover","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.506Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1001,\"final_model\":\"gpt-5.1-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TransientProcessingErrorTriggersFailover","Output":"--- PASS: TestOpenAIGatewayService_Forward_TransientProcessingErrorTriggersFailover (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TransientProcessingErrorTriggersFailover","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ModelCapacityErrorTriggersFailoverAndSameAccountRetry"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ModelCapacityErrorTriggersFailoverAndSameAccountRetry","Output":"=== RUN TestOpenAIGatewayService_Forward_ModelCapacityErrorTriggersFailoverAndSameAccountRetry\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ModelCapacityErrorTriggersFailoverAndSameAccountRetry","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.506Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1001,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ModelCapacityErrorTriggersFailoverAndSameAccountRetry","Output":"--- PASS: TestOpenAIGatewayService_Forward_ModelCapacityErrorTriggersFailoverAndSameAccountRetry (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ModelCapacityErrorTriggersFailoverAndSameAccountRetry","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime","Output":"=== RUN TestCodexSnapshotBaseTime\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/nil_snapshot_uses_fallback"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/nil_snapshot_uses_fallback","Output":"=== RUN TestCodexSnapshotBaseTime/nil_snapshot_uses_fallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/nil_snapshot_uses_fallback","Output":"--- PASS: TestCodexSnapshotBaseTime/nil_snapshot_uses_fallback (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/nil_snapshot_uses_fallback","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/empty_updatedAt_uses_fallback"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/empty_updatedAt_uses_fallback","Output":"=== RUN TestCodexSnapshotBaseTime/empty_updatedAt_uses_fallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/empty_updatedAt_uses_fallback","Output":"--- PASS: TestCodexSnapshotBaseTime/empty_updatedAt_uses_fallback (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/empty_updatedAt_uses_fallback","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/valid_updatedAt_wins"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/valid_updatedAt_wins","Output":"=== RUN TestCodexSnapshotBaseTime/valid_updatedAt_wins\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/valid_updatedAt_wins","Output":"--- PASS: TestCodexSnapshotBaseTime/valid_updatedAt_wins (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/valid_updatedAt_wins","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/invalid_updatedAt_uses_fallback"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/invalid_updatedAt_uses_fallback","Output":"=== RUN TestCodexSnapshotBaseTime/invalid_updatedAt_uses_fallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/invalid_updatedAt_uses_fallback","Output":"--- PASS: TestCodexSnapshotBaseTime/invalid_updatedAt_uses_fallback (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/invalid_updatedAt_uses_fallback","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime","Output":"--- PASS: TestCodexSnapshotBaseTime (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339","Output":"=== RUN TestCodexResetAtRFC3339\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339/nil_reset_returns_nil"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339/nil_reset_returns_nil","Output":"=== RUN TestCodexResetAtRFC3339/nil_reset_returns_nil\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339/nil_reset_returns_nil","Output":"--- PASS: TestCodexResetAtRFC3339/nil_reset_returns_nil (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339/nil_reset_returns_nil","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339/positive_seconds"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339/positive_seconds","Output":"=== RUN TestCodexResetAtRFC3339/positive_seconds\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339/positive_seconds","Output":"--- PASS: TestCodexResetAtRFC3339/positive_seconds (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339/positive_seconds","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339/negative_seconds_clamp_to_base"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339/negative_seconds_clamp_to_base","Output":"=== RUN TestCodexResetAtRFC3339/negative_seconds_clamp_to_base\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339/negative_seconds_clamp_to_base","Output":"--- PASS: TestCodexResetAtRFC3339/negative_seconds_clamp_to_base (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339/negative_seconds_clamp_to_base","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339","Output":"--- PASS: TestCodexResetAtRFC3339 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_UsesSnapshotUpdatedAt"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_UsesSnapshotUpdatedAt","Output":"=== RUN TestBuildCodexUsageExtraUpdates_UsesSnapshotUpdatedAt\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_UsesSnapshotUpdatedAt","Output":"--- PASS: TestBuildCodexUsageExtraUpdates_UsesSnapshotUpdatedAt (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_UsesSnapshotUpdatedAt","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_FreshAccountUsedPercentNotInverted_Issue2994"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_FreshAccountUsedPercentNotInverted_Issue2994","Output":"=== RUN TestBuildCodexUsageExtraUpdates_FreshAccountUsedPercentNotInverted_Issue2994\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_FreshAccountUsedPercentNotInverted_Issue2994","Output":"--- PASS: TestBuildCodexUsageExtraUpdates_FreshAccountUsedPercentNotInverted_Issue2994 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_FreshAccountUsedPercentNotInverted_Issue2994","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_FallbackToNowWhenUpdatedAtInvalid"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_FallbackToNowWhenUpdatedAtInvalid","Output":"=== RUN TestBuildCodexUsageExtraUpdates_FallbackToNowWhenUpdatedAtInvalid\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_FallbackToNowWhenUpdatedAtInvalid","Output":"--- PASS: TestBuildCodexUsageExtraUpdates_FallbackToNowWhenUpdatedAtInvalid (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_FallbackToNowWhenUpdatedAtInvalid","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_ClampNegativeResetSeconds"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_ClampNegativeResetSeconds","Output":"=== RUN TestBuildCodexUsageExtraUpdates_ClampNegativeResetSeconds\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_ClampNegativeResetSeconds","Output":"--- PASS: TestBuildCodexUsageExtraUpdates_ClampNegativeResetSeconds (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_ClampNegativeResetSeconds","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_NilSnapshot"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_NilSnapshot","Output":"=== RUN TestBuildCodexUsageExtraUpdates_NilSnapshot\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_NilSnapshot","Output":"--- PASS: TestBuildCodexUsageExtraUpdates_NilSnapshot (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_NilSnapshot","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_WithoutNormalizedWindowFields"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_WithoutNormalizedWindowFields","Output":"=== RUN TestBuildCodexUsageExtraUpdates_WithoutNormalizedWindowFields\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_WithoutNormalizedWindowFields","Output":"--- PASS: TestBuildCodexUsageExtraUpdates_WithoutNormalizedWindowFields (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_WithoutNormalizedWindowFields","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_ExtractsRawScalars"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_ExtractsRawScalars","Output":"=== RUN TestOpenAIRequestView_ExtractsRawScalars\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_ExtractsRawScalars","Output":"--- PASS: TestOpenAIRequestView_ExtractsRawScalars (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_ExtractsRawScalars","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_ExtractsFieldsAfterLargeInput"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_ExtractsFieldsAfterLargeInput","Output":"=== RUN TestOpenAIRequestView_ExtractsFieldsAfterLargeInput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_ExtractsFieldsAfterLargeInput","Output":"--- PASS: TestOpenAIRequestView_ExtractsFieldsAfterLargeInput (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_ExtractsFieldsAfterLargeInput","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_KeepsFirstDuplicateField"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_KeepsFirstDuplicateField","Output":"=== RUN TestOpenAIRequestView_KeepsFirstDuplicateField\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_KeepsFirstDuplicateField","Output":"--- PASS: TestOpenAIRequestView_KeepsFirstDuplicateField (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_KeepsFirstDuplicateField","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_KeepsLenientPrefixExtraction"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_KeepsLenientPrefixExtraction","Output":"=== RUN TestOpenAIRequestView_KeepsLenientPrefixExtraction\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_KeepsLenientPrefixExtraction","Output":"--- PASS: TestOpenAIRequestView_KeepsLenientPrefixExtraction (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_KeepsLenientPrefixExtraction","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_DecodeKeepsFullMapBehavior"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_DecodeKeepsFullMapBehavior","Output":"=== RUN TestOpenAIRequestView_DecodeKeepsFullMapBehavior\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_DecodeKeepsFullMapBehavior","Output":"--- PASS: TestOpenAIRequestView_DecodeKeepsFullMapBehavior (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_DecodeKeepsFullMapBehavior","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_ApplyPatches"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_ApplyPatches","Output":"=== RUN TestOpenAIRequestView_ApplyPatches\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_ApplyPatches","Output":"--- PASS: TestOpenAIRequestView_ApplyPatches (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_ApplyPatches","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_RejectsEscapedPatchPath"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_RejectsEscapedPatchPath","Output":"=== RUN TestOpenAIRequestView_RejectsEscapedPatchPath\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_RejectsEscapedPatchPath","Output":"--- PASS: TestOpenAIRequestView_RejectsEscapedPatchPath (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_RejectsEscapedPatchPath","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_ApplyPatchesDisabled"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_ApplyPatchesDisabled","Output":"=== RUN TestOpenAIRequestView_ApplyPatchesDisabled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_ApplyPatchesDisabled","Output":"--- PASS: TestOpenAIRequestView_ApplyPatchesDisabled (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_ApplyPatchesDisabled","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_HasPatches"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_HasPatches","Output":"=== RUN TestOpenAIRequestView_HasPatches\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_HasPatches","Output":"--- PASS: TestOpenAIRequestView_HasPatches (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_HasPatches","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_APIKeyMissingInstructionsKeepsLargeInputRaw"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_APIKeyMissingInstructionsKeepsLargeInputRaw","Output":"=== RUN TestOpenAIGatewayService_Forward_APIKeyMissingInstructionsKeepsLargeInputRaw\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_APIKeyMissingInstructionsKeepsLargeInputRaw","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.506Z\",\"msg\":\"[OpenAI] Normalized reasoning.effort: minimal -\u003e none (account: openai-apikey)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_APIKeyMissingInstructionsKeepsLargeInputRaw","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.506Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_APIKeyMissingInstructionsKeepsLargeInputRaw","Output":"--- PASS: TestOpenAIGatewayService_Forward_APIKeyMissingInstructionsKeepsLargeInputRaw (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_APIKeyMissingInstructionsKeepsLargeInputRaw","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_DecodedMutationKeepsLaterFieldDeletes"}
- {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_DecodedMutationKeepsLaterFieldDeletes","Output":"=== RUN TestOpenAIGatewayService_Forward_DecodedMutationKeepsLaterFieldDeletes\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_DecodedMutationKeepsLaterFieldDeletes","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"[OpenAI] Normalized /responses image_generation tool payload\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_DecodedMutationKeepsLaterFieldDeletes","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"[OpenAI] /responses image_generation request inbound_model=gpt-5.4 mapped_model=gpt-5.4 account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_DecodedMutationKeepsLaterFieldDeletes","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":2,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_DecodedMutationKeepsLaterFieldDeletes","Output":"--- PASS: TestOpenAIGatewayService_Forward_DecodedMutationKeepsLaterFieldDeletes (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_DecodedMutationKeepsLaterFieldDeletes","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions"}
- {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions","Output":"=== RUN TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions/max_tokens_归一化为_max_output_tokens_并移除_prompt_cache_options"}
- {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions/max_tokens_归一化为_max_output_tokens_并移除_prompt_cache_options","Output":"=== RUN TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions/max_tokens_归一化为_max_output_tokens_并移除_prompt_cache_options\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions/max_tokens_归一化为_max_output_tokens_并移除_prompt_cache_options","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":4,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions/max_tokens_归一化为_max_output_tokens_并移除_prompt_cache_options","Output":"--- PASS: TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions/max_tokens_归一化为_max_output_tokens_并移除_prompt_cache_options (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions/max_tokens_归一化为_max_output_tokens_并移除_prompt_cache_options","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions/同时存在时保留_max_output_tokens_丢弃_max_tokens"}
- {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions/同时存在时保留_max_output_tokens_丢弃_max_tokens","Output":"=== RUN TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions/同时存在时保留_max_output_tokens_丢弃_max_tokens\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions/同时存在时保留_max_output_tokens_丢弃_max_tokens","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":4,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions/同时存在时保留_max_output_tokens_丢弃_max_tokens","Output":"--- PASS: TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions/同时存在时保留_max_output_tokens_丢弃_max_tokens (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions/同时存在时保留_max_output_tokens_丢弃_max_tokens","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions","Output":"--- PASS: TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_MappedImageModelUsesImageGate"}
- {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_MappedImageModelUsesImageGate","Output":"=== RUN TestOpenAIGatewayService_Forward_MappedImageModelUsesImageGate\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_MappedImageModelUsesImageGate","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"[OpenAI] Model mapping applied: draw-alias -\u003e gpt-image-2 (account: openai-apikey, isCodexCLI: false)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_MappedImageModelUsesImageGate","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":4,\"final_model\":\"draw-alias\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_MappedImageModelUsesImageGate","Output":"--- PASS: TestOpenAIGatewayService_Forward_MappedImageModelUsesImageGate (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_MappedImageModelUsesImageGate","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesSetsBillingModelToMappedModel"}
- {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesSetsBillingModelToMappedModel","Output":"=== RUN TestOpenAIGatewayService_Forward_TextResponsesSetsBillingModelToMappedModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesSetsBillingModelToMappedModel","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"[OpenAI] Model mapping applied: gpt-5.4 -\u003e gpt-5.5 (account: openai-apikey, isCodexCLI: false)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesSetsBillingModelToMappedModel","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":4,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesSetsBillingModelToMappedModel","Output":"--- PASS: TestOpenAIGatewayService_Forward_TextResponsesSetsBillingModelToMappedModel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesSetsBillingModelToMappedModel","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesWithoutMappingKeepsRequestedBillingModel"}
- {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesWithoutMappingKeepsRequestedBillingModel","Output":"=== RUN TestOpenAIGatewayService_Forward_TextResponsesWithoutMappingKeepsRequestedBillingModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesWithoutMappingKeepsRequestedBillingModel","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":4,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesWithoutMappingKeepsRequestedBillingModel","Output":"--- PASS: TestOpenAIGatewayService_Forward_TextResponsesWithoutMappingKeepsRequestedBillingModel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesWithoutMappingKeepsRequestedBillingModel","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesBillingModelMatchesChatCompletions"}
- {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesBillingModelMatchesChatCompletions","Output":"=== RUN TestOpenAIGatewayService_Forward_TextResponsesBillingModelMatchesChatCompletions\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesBillingModelMatchesChatCompletions","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"[OpenAI] Model mapping applied: gpt-5.4 -\u003e gpt-5.5 (account: openai-apikey, isCodexCLI: false)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesBillingModelMatchesChatCompletions","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesBillingModelMatchesChatCompletions","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"openai chat_completions: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":5,\"original_model\":\"gpt-5.4\",\"billing_model\":\"gpt-5.5\",\"upstream_model\":\"gpt-5.5\",\"stream\":false,\"responses_shape\":false,\"compat_prompt_cache_key_injected\":true,\"compat_prompt_cache_key_sha256\":\"afe45bd33058d42a\"}\n"}
- {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesBillingModelMatchesChatCompletions","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesBillingModelMatchesChatCompletions","Output":"--- PASS: TestOpenAIGatewayService_Forward_TextResponsesBillingModelMatchesChatCompletions (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesBillingModelMatchesChatCompletions","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextDataImageDoesNotForceMapMarshal"}
- {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextDataImageDoesNotForceMapMarshal","Output":"=== RUN TestOpenAIGatewayService_Forward_TextDataImageDoesNotForceMapMarshal\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextDataImageDoesNotForceMapMarshal","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":4,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextDataImageDoesNotForceMapMarshal","Output":"--- PASS: TestOpenAIGatewayService_Forward_TextDataImageDoesNotForceMapMarshal (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextDataImageDoesNotForceMapMarshal","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageToolBillingDoesNotForceFullDecode"}
- {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageToolBillingDoesNotForceFullDecode","Output":"=== RUN TestOpenAIGatewayService_Forward_ImageToolBillingDoesNotForceFullDecode\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageToolBillingDoesNotForceFullDecode","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"[OpenAI] /responses image_generation request inbound_model=gpt-5 mapped_model=gpt-5 account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageToolBillingDoesNotForceFullDecode","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":9,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageToolBillingDoesNotForceFullDecode","Output":"--- PASS: TestOpenAIGatewayService_Forward_ImageToolBillingDoesNotForceFullDecode (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageToolBillingDoesNotForceFullDecode","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageToolWithImageOnlyModelIsNormalized"}
- {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageToolWithImageOnlyModelIsNormalized","Output":"=== RUN TestOpenAIGatewayService_Forward_ImageToolWithImageOnlyModelIsNormalized\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageToolWithImageOnlyModelIsNormalized","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"[OpenAI] Normalized /responses image-only model request inbound_model=gpt-image-2 image_model=gpt-image-2 upstream_model=gpt-5.6-luna\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageToolWithImageOnlyModelIsNormalized","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"[OpenAI] /responses image_generation request inbound_model=gpt-image-2 mapped_model=gpt-5.6-luna account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageToolWithImageOnlyModelIsNormalized","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":11,\"final_model\":\"gpt-5.6-luna\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageToolWithImageOnlyModelIsNormalized","Output":"--- PASS: TestOpenAIGatewayService_Forward_ImageToolWithImageOnlyModelIsNormalized (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageToolWithImageOnlyModelIsNormalized","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPRetryRecoveryDoesNotDecodeBeforeError"}
- {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPRetryRecoveryDoesNotDecodeBeforeError","Output":"=== RUN TestOpenAIGatewayService_Forward_HTTPRetryRecoveryDoesNotDecodeBeforeError\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPRetryRecoveryDoesNotDecodeBeforeError","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":10,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPRetryRecoveryDoesNotDecodeBeforeError","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"[OpenAI] Retrying non-WSv2 request once after invalid_encrypted_content (account: openai-apikey)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPRetryRecoveryDoesNotDecodeBeforeError","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":10,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPRetryRecoveryDoesNotDecodeBeforeError","Output":"--- PASS: TestOpenAIGatewayService_Forward_HTTPRetryRecoveryDoesNotDecodeBeforeError (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPRetryRecoveryDoesNotDecodeBeforeError","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPRetryRecoveryDropsCompaction"}
- {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPRetryRecoveryDropsCompaction","Output":"=== RUN TestOpenAIGatewayService_Forward_HTTPRetryRecoveryDropsCompaction\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPRetryRecoveryDropsCompaction","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.508Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":10,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPRetryRecoveryDropsCompaction","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.508Z\",\"msg\":\"[OpenAI] Retrying non-WSv2 request once after invalid_encrypted_content (account: openai-apikey)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPRetryRecoveryDropsCompaction","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.508Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":10,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPRetryRecoveryDropsCompaction","Output":"--- PASS: TestOpenAIGatewayService_Forward_HTTPRetryRecoveryDropsCompaction (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPRetryRecoveryDropsCompaction","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexSparkRejectsEscapedInputImage"}
- {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexSparkRejectsEscapedInputImage","Output":"=== RUN TestOpenAIGatewayService_Forward_CodexSparkRejectsEscapedInputImage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexSparkRejectsEscapedInputImage","Output":"--- PASS: TestOpenAIGatewayService_Forward_CodexSparkRejectsEscapedInputImage (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexSparkRejectsEscapedInputImage","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexBridgeInjectionSetsImageBilling"}
- {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexBridgeInjectionSetsImageBilling","Output":"=== RUN TestOpenAIGatewayService_Forward_CodexBridgeInjectionSetsImageBilling\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexBridgeInjectionSetsImageBilling","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.508Z\",\"msg\":\"[OpenAI] Injected /responses image_generation tool for Codex client\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexBridgeInjectionSetsImageBilling","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.508Z\",\"msg\":\"[OpenAI] Set /responses image_generation tool_choice=auto for Codex client\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexBridgeInjectionSetsImageBilling","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.508Z\",\"msg\":\"[OpenAI] /responses image_generation request inbound_model=gpt-5 mapped_model=gpt-5 account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexBridgeInjectionSetsImageBilling","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.508Z\",\"msg\":\"[OpenAI] Added Codex image_generation bridge instructions\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexBridgeInjectionSetsImageBilling","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.508Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":7,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexBridgeInjectionSetsImageBilling","Output":"--- PASS: TestOpenAIGatewayService_Forward_CodexBridgeInjectionSetsImageBilling (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexBridgeInjectionSetsImageBilling","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPPreservesPreviousResponseIDForAPIKey"}
- {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPPreservesPreviousResponseIDForAPIKey","Output":"=== RUN TestOpenAIGatewayService_Forward_HTTPPreservesPreviousResponseIDForAPIKey\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPPreservesPreviousResponseIDForAPIKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.508Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":8,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPPreservesPreviousResponseIDForAPIKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.508Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":8,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPPreservesPreviousResponseIDForAPIKey","Output":"--- PASS: TestOpenAIGatewayService_Forward_HTTPPreservesPreviousResponseIDForAPIKey (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPPreservesPreviousResponseIDForAPIKey","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_StripsImageGenerationToolForSparkAPIKey"}
- {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_StripsImageGenerationToolForSparkAPIKey","Output":"=== RUN TestOpenAIGatewayService_Forward_StripsImageGenerationToolForSparkAPIKey\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_StripsImageGenerationToolForSparkAPIKey","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.508Z\",\"msg\":\"[OpenAI] /responses image_generation request inbound_model=gpt-5.3-codex-spark mapped_model=gpt-5.3-codex-spark account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_StripsImageGenerationToolForSparkAPIKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.508Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":11,\"final_model\":\"gpt-5.3-codex-spark\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_StripsImageGenerationToolForSparkAPIKey","Output":"--- PASS: TestOpenAIGatewayService_Forward_StripsImageGenerationToolForSparkAPIKey (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_StripsImageGenerationToolForSparkAPIKey","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedJSON"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedJSON","Output":"=== RUN TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedJSON\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedJSON","Output":"--- PASS: TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedJSON (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedJSON","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedImageType"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedImageType","Output":"=== RUN TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedImageType\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedImageType","Output":"--- PASS: TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedImageType (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedImageType","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedInputPrefix"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedInputPrefix","Output":"=== RUN TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedInputPrefix\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedInputPrefix","Output":"--- PASS: TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedInputPrefix (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedInputPrefix","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageOnlyModelKeepsSupportedVerbosity"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageOnlyModelKeepsSupportedVerbosity","Output":"=== RUN TestOpenAIGatewayService_Forward_ImageOnlyModelKeepsSupportedVerbosity\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageOnlyModelKeepsSupportedVerbosity","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.508Z\",\"msg\":\"[OpenAI] Normalized /responses image-only model request inbound_model=gpt-image-2 image_model=gpt-image-2 upstream_model=gpt-5.6-luna\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageOnlyModelKeepsSupportedVerbosity","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.508Z\",\"msg\":\"[OpenAI] /responses image_generation request inbound_model=gpt-image-2 mapped_model=gpt-5.6-luna account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageOnlyModelKeepsSupportedVerbosity","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.508Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":6,\"final_model\":\"gpt-5.6-luna\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageOnlyModelKeepsSupportedVerbosity","Output":"--- PASS: TestOpenAIGatewayService_Forward_ImageOnlyModelKeepsSupportedVerbosity (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageOnlyModelKeepsSupportedVerbosity","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIRequestMetaFromBody"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIRequestMetaFromBody","Output":"=== RUN TestExtractOpenAIRequestMetaFromBody\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIRequestMetaFromBody/完整字段"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIRequestMetaFromBody/完整字段","Output":"=== RUN TestExtractOpenAIRequestMetaFromBody/完整字段\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIRequestMetaFromBody/完整字段","Output":"--- PASS: TestExtractOpenAIRequestMetaFromBody/完整字段 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIRequestMetaFromBody/完整字段","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIRequestMetaFromBody/缺失可选字段"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIRequestMetaFromBody/缺失可选字段","Output":"=== RUN TestExtractOpenAIRequestMetaFromBody/缺失可选字段\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIRequestMetaFromBody/缺失可选字段","Output":"--- PASS: TestExtractOpenAIRequestMetaFromBody/缺失可选字段 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIRequestMetaFromBody/缺失可选字段","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIRequestMetaFromBody/空请求体"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIRequestMetaFromBody/空请求体","Output":"=== RUN TestExtractOpenAIRequestMetaFromBody/空请求体\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIRequestMetaFromBody/空请求体","Output":"--- PASS: TestExtractOpenAIRequestMetaFromBody/空请求体 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIRequestMetaFromBody/空请求体","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIRequestMetaFromBody","Output":"--- PASS: TestExtractOpenAIRequestMetaFromBody (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIRequestMetaFromBody","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody","Output":"=== RUN TestExtractOpenAIReasoningEffortFromBody\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/优先读取_reasoning.effort"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/优先读取_reasoning.effort","Output":"=== RUN TestExtractOpenAIReasoningEffortFromBody/优先读取_reasoning.effort\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/优先读取_reasoning.effort","Output":"--- PASS: TestExtractOpenAIReasoningEffortFromBody/优先读取_reasoning.effort (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/优先读取_reasoning.effort","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/兼容_reasoning_effort"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/兼容_reasoning_effort","Output":"=== RUN TestExtractOpenAIReasoningEffortFromBody/兼容_reasoning_effort\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/兼容_reasoning_effort","Output":"--- PASS: TestExtractOpenAIReasoningEffortFromBody/兼容_reasoning_effort (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/兼容_reasoning_effort","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/DeepSeek_V4_保留_max"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/DeepSeek_V4_保留_max","Output":"=== RUN TestExtractOpenAIReasoningEffortFromBody/DeepSeek_V4_保留_max\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/DeepSeek_V4_保留_max","Output":"--- PASS: TestExtractOpenAIReasoningEffortFromBody/DeepSeek_V4_保留_max (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/DeepSeek_V4_保留_max","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/旧模型仍将_max_归一化为_xhigh"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/旧模型仍将_max_归一化为_xhigh","Output":"=== RUN TestExtractOpenAIReasoningEffortFromBody/旧模型仍将_max_归一化为_xhigh\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/旧模型仍将_max_归一化为_xhigh","Output":"--- PASS: TestExtractOpenAIReasoningEffortFromBody/旧模型仍将_max_归一化为_xhigh (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/旧模型仍将_max_归一化为_xhigh","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/minimal_归一化为空"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/minimal_归一化为空","Output":"=== RUN TestExtractOpenAIReasoningEffortFromBody/minimal_归一化为空\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/minimal_归一化为空","Output":"--- PASS: TestExtractOpenAIReasoningEffortFromBody/minimal_归一化为空 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/minimal_归一化为空","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/缺失字段时从模型后缀推导"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/缺失字段时从模型后缀推导","Output":"=== RUN TestExtractOpenAIReasoningEffortFromBody/缺失字段时从模型后缀推导\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/缺失字段时从模型后缀推导","Output":"--- PASS: TestExtractOpenAIReasoningEffortFromBody/缺失字段时从模型后缀推导 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/缺失字段时从模型后缀推导","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/未知后缀不返回"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/未知后缀不返回","Output":"=== RUN TestExtractOpenAIReasoningEffortFromBody/未知后缀不返回\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/未知后缀不返回","Output":"--- PASS: TestExtractOpenAIReasoningEffortFromBody/未知后缀不返回 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/未知后缀不返回","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody","Output":"--- PASS: TestExtractOpenAIReasoningEffortFromBody (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIRequestBodyMap_ParseError"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIRequestBodyMap_ParseError","Output":"=== RUN TestGetOpenAIRequestBodyMap_ParseError\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIRequestBodyMap_ParseError","Output":"--- PASS: TestGetOpenAIRequestBodyMap_ParseError (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIRequestBodyMap_ParseError","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIRequestBodyMap_DoesNotWriteContextCache"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIRequestBodyMap_DoesNotWriteContextCache","Output":"=== RUN TestGetOpenAIRequestBodyMap_DoesNotWriteContextCache\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIRequestBodyMap_DoesNotWriteContextCache","Output":"--- PASS: TestGetOpenAIRequestBodyMap_DoesNotWriteContextCache (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIRequestBodyMap_DoesNotWriteContextCache","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeEmptyBase64InputImagesInOpenAIRequestBodyMap"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeEmptyBase64InputImagesInOpenAIRequestBodyMap","Output":"=== RUN TestSanitizeEmptyBase64InputImagesInOpenAIRequestBodyMap\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeEmptyBase64InputImagesInOpenAIRequestBodyMap","Output":"--- PASS: TestSanitizeEmptyBase64InputImagesInOpenAIRequestBodyMap (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeEmptyBase64InputImagesInOpenAIRequestBodyMap","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeEmptyBase64InputImagesInOpenAIBody"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeEmptyBase64InputImagesInOpenAIBody","Output":"=== RUN TestSanitizeEmptyBase64InputImagesInOpenAIBody\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeEmptyBase64InputImagesInOpenAIBody","Output":"--- PASS: TestSanitizeEmptyBase64InputImagesInOpenAIBody (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeEmptyBase64InputImagesInOpenAIBody","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID","Output":"=== RUN TestIsolateOpenAISessionID\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/empty_raw_returns_empty"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/empty_raw_returns_empty","Output":"=== RUN TestIsolateOpenAISessionID/empty_raw_returns_empty\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/empty_raw_returns_empty","Output":"--- PASS: TestIsolateOpenAISessionID/empty_raw_returns_empty (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/empty_raw_returns_empty","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/deterministic"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/deterministic","Output":"=== RUN TestIsolateOpenAISessionID/deterministic\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/deterministic","Output":"--- PASS: TestIsolateOpenAISessionID/deterministic (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/deterministic","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/different_apiKeyID_different_result"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/different_apiKeyID_different_result","Output":"=== RUN TestIsolateOpenAISessionID/different_apiKeyID_different_result\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/different_apiKeyID_different_result","Output":"--- PASS: TestIsolateOpenAISessionID/different_apiKeyID_different_result (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/different_apiKeyID_different_result","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/different_raw_different_result"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/different_raw_different_result","Output":"=== RUN TestIsolateOpenAISessionID/different_raw_different_result\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/different_raw_different_result","Output":"--- PASS: TestIsolateOpenAISessionID/different_raw_different_result (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/different_raw_different_result","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/format_is_16_hex_chars"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/format_is_16_hex_chars","Output":"=== RUN TestIsolateOpenAISessionID/format_is_16_hex_chars\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/format_is_16_hex_chars","Output":"--- PASS: TestIsolateOpenAISessionID/format_is_16_hex_chars (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/format_is_16_hex_chars","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/zero_apiKeyID_still_works"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/zero_apiKeyID_still_works","Output":"=== RUN TestIsolateOpenAISessionID/zero_apiKeyID_still_works\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/zero_apiKeyID_still_works","Output":"--- PASS: TestIsolateOpenAISessionID/zero_apiKeyID_still_works (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/zero_apiKeyID_still_works","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID","Output":"--- PASS: TestIsolateOpenAISessionID (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardAsAnthropic_CapacityShedReturnsRequestScopedFailoverWithoutCommit"}
- {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardAsAnthropic_CapacityShedReturnsRequestScopedFailoverWithoutCommit","Output":"=== RUN TestOpenAIGatewayService_ForwardAsAnthropic_CapacityShedReturnsRequestScopedFailoverWithoutCommit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardAsAnthropic_CapacityShedReturnsRequestScopedFailoverWithoutCommit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.509Z\",\"msg\":\"openai messages: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":5099,\"original_model\":\"gpt-5.4\",\"normalized_model\":\"gpt-5.4\",\"billing_model\":\"gpt-5.4\",\"upstream_model\":\"gpt-5.4\",\"stream\":true,\"compat_prompt_cache_key_injected\":true,\"compat_prompt_cache_key_sha256\":\"27ab57cd52a79bd0\"}\n"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardAsAnthropic_CapacityShedReturnsRequestScopedFailoverWithoutCommit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.509Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5099,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardAsAnthropic_CapacityShedReturnsRequestScopedFailoverWithoutCommit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.509Z\",\"msg\":\"openai messages: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":5100,\"original_model\":\"gpt-5.4\",\"normalized_model\":\"gpt-5.4\",\"billing_model\":\"gpt-5.4\",\"upstream_model\":\"gpt-5.4\",\"stream\":true,\"compat_prompt_cache_key_injected\":true,\"compat_prompt_cache_key_sha256\":\"27ab57cd52a79bd0\"}\n"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardAsAnthropic_CapacityShedReturnsRequestScopedFailoverWithoutCommit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.509Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5100,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardAsAnthropic_CapacityShedReturnsRequestScopedFailoverWithoutCommit","Output":"--- PASS: TestOpenAIGatewayService_ForwardAsAnthropic_CapacityShedReturnsRequestScopedFailoverWithoutCommit (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardAsAnthropic_CapacityShedReturnsRequestScopedFailoverWithoutCommit","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFailoverOpenAIUpstreamHTTPError_NilContextSkipsTempUnschedulablePolicy"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFailoverOpenAIUpstreamHTTPError_NilContextSkipsTempUnschedulablePolicy","Output":"=== RUN TestFailoverOpenAIUpstreamHTTPError_NilContextSkipsTempUnschedulablePolicy\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFailoverOpenAIUpstreamHTTPError_NilContextSkipsTempUnschedulablePolicy","Output":"--- PASS: TestFailoverOpenAIUpstreamHTTPError_NilContextSkipsTempUnschedulablePolicy (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFailoverOpenAIUpstreamHTTPError_NilContextSkipsTempUnschedulablePolicy","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_Priority"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_Priority","Output":"=== RUN TestOpenAIGatewayService_GenerateSessionHash_Priority\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_Priority","Output":"--- PASS: TestOpenAIGatewayService_GenerateSessionHash_Priority (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_Priority","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ClientSessionHeaderPriority"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ClientSessionHeaderPriority","Output":"=== RUN TestOpenAIGatewayService_ClientSessionHeaderPriority\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ClientSessionHeaderPriority","Output":"--- PASS: TestOpenAIGatewayService_ClientSessionHeaderPriority (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ClientSessionHeaderPriority","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexSessionIDKeepsReconnectHashStable"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexSessionIDKeepsReconnectHashStable","Output":"=== RUN TestOpenAIGatewayService_CodexSessionIDKeepsReconnectHashStable\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexSessionIDKeepsReconnectHashStable","Output":"--- PASS: TestOpenAIGatewayService_CodexSessionIDKeepsReconnectHashStable (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexSessionIDKeepsReconnectHashStable","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ClientSessionHeadersIgnorePerRequestIDs"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ClientSessionHeadersIgnorePerRequestIDs","Output":"=== RUN TestOpenAIGatewayService_ClientSessionHeadersIgnorePerRequestIDs\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ClientSessionHeadersIgnorePerRequestIDs","Output":"--- PASS: TestOpenAIGatewayService_ClientSessionHeadersIgnorePerRequestIDs (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ClientSessionHeadersIgnorePerRequestIDs","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_UsesXXHash64"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_UsesXXHash64","Output":"=== RUN TestOpenAIGatewayService_GenerateSessionHash_UsesXXHash64\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_UsesXXHash64","Output":"--- PASS: TestOpenAIGatewayService_GenerateSessionHash_UsesXXHash64 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_UsesXXHash64","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_AttachesLegacyHashToContext"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_AttachesLegacyHashToContext","Output":"=== RUN TestOpenAIGatewayService_GenerateSessionHash_AttachesLegacyHashToContext\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_AttachesLegacyHashToContext","Output":"--- PASS: TestOpenAIGatewayService_GenerateSessionHash_AttachesLegacyHashToContext (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_AttachesLegacyHashToContext","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIResponseIDFromJSONBytes"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIResponseIDFromJSONBytes","Output":"=== RUN TestExtractOpenAIResponseIDFromJSONBytes\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIResponseIDFromJSONBytes","Output":"--- PASS: TestExtractOpenAIResponseIDFromJSONBytes (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIResponseIDFromJSONBytes","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsage_CapturesImageInputTokens"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsage_CapturesImageInputTokens","Output":"=== RUN TestExtractOpenAIUsage_CapturesImageInputTokens\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsage_CapturesImageInputTokens","Output":"--- PASS: TestExtractOpenAIUsage_CapturesImageInputTokens (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsage_CapturesImageInputTokens","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsage_ReadsClineDataEnvelope"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsage_ReadsClineDataEnvelope","Output":"=== RUN TestExtractOpenAIUsage_ReadsClineDataEnvelope\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsage_ReadsClineDataEnvelope","Output":"--- PASS: TestExtractOpenAIUsage_ReadsClineDataEnvelope (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsage_ReadsClineDataEnvelope","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsage_ReadsWrappedResponsesDataEnvelope"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsage_ReadsWrappedResponsesDataEnvelope","Output":"=== RUN TestExtractOpenAIUsage_ReadsWrappedResponsesDataEnvelope\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsage_ReadsWrappedResponsesDataEnvelope","Output":"--- PASS: TestExtractOpenAIUsage_ReadsWrappedResponsesDataEnvelope (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsage_ReadsWrappedResponsesDataEnvelope","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsage_PreservesResponseUsagePriority"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsage_PreservesResponseUsagePriority","Output":"=== RUN TestExtractOpenAIUsage_PreservesResponseUsagePriority\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsage_PreservesResponseUsagePriority","Output":"--- PASS: TestExtractOpenAIUsage_PreservesResponseUsagePriority (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsage_PreservesResponseUsagePriority","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_BindHTTPResponseAccount"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_BindHTTPResponseAccount","Output":"=== RUN TestOpenAIGatewayService_BindHTTPResponseAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_BindHTTPResponseAccount","Output":"--- PASS: TestOpenAIGatewayService_BindHTTPResponseAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_BindHTTPResponseAccount","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback","Output":"=== RUN TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback/stateless_image_body_stays_unstuck"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback/stateless_image_body_stays_unstuck","Output":"=== RUN TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback/stateless_image_body_stays_unstuck\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback/stateless_image_body_stays_unstuck","Output":"--- PASS: TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback/stateless_image_body_stays_unstuck (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback/stateless_image_body_stays_unstuck","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback/prompt_cache_key_is_explicit"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback/prompt_cache_key_is_explicit","Output":"=== RUN TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback/prompt_cache_key_is_explicit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback/prompt_cache_key_is_explicit","Output":"--- PASS: TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback/prompt_cache_key_is_explicit (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback/prompt_cache_key_is_explicit","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback/header_overrides_body"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback/header_overrides_body","Output":"=== RUN TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback/header_overrides_body\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback/header_overrides_body","Output":"--- PASS: TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback/header_overrides_body (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback/header_overrides_body","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback","Output":"--- PASS: TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHashWithFallback"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHashWithFallback","Output":"=== RUN TestOpenAIGatewayService_GenerateSessionHashWithFallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHashWithFallback","Output":"--- PASS: TestOpenAIGatewayService_GenerateSessionHashWithFallback (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHashWithFallback","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_ContentFallback"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_ContentFallback","Output":"=== RUN TestOpenAIGatewayService_GenerateSessionHash_ContentFallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_ContentFallback","Output":"--- PASS: TestOpenAIGatewayService_GenerateSessionHash_ContentFallback (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_ContentFallback","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_ExplicitSignalWinsOverContent"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_ExplicitSignalWinsOverContent","Output":"=== RUN TestOpenAIGatewayService_GenerateSessionHash_ExplicitSignalWinsOverContent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_ExplicitSignalWinsOverContent","Output":"--- PASS: TestOpenAIGatewayService_GenerateSessionHash_ExplicitSignalWinsOverContent (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_ExplicitSignalWinsOverContent","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_EmptyBodyStillEmpty"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_EmptyBodyStillEmpty","Output":"=== RUN TestOpenAIGatewayService_GenerateSessionHash_EmptyBodyStillEmpty\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_EmptyBodyStillEmpty","Output":"--- PASS: TestOpenAIGatewayService_GenerateSessionHash_EmptyBodyStillEmpty (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_EmptyBodyStillEmpty","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_FiltersUnschedulable"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_FiltersUnschedulable","Output":"=== RUN TestOpenAISelectAccountWithLoadAwareness_FiltersUnschedulable\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_FiltersUnschedulable","Output":"--- PASS: TestOpenAISelectAccountWithLoadAwareness_FiltersUnschedulable (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_FiltersUnschedulable","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_ImageRateLimitSkipsOnlyImageRequests"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_ImageRateLimitSkipsOnlyImageRequests","Output":"=== RUN TestOpenAISelectAccountWithLoadAwareness_ImageRateLimitSkipsOnlyImageRequests\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_ImageRateLimitSkipsOnlyImageRequests","Output":"--- PASS: TestOpenAISelectAccountWithLoadAwareness_ImageRateLimitSkipsOnlyImageRequests (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_ImageRateLimitSkipsOnlyImageRequests","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_FiltersUnschedulableWhenNoConcurrencyService"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_FiltersUnschedulableWhenNoConcurrencyService","Output":"=== RUN TestOpenAISelectAccountWithLoadAwareness_FiltersUnschedulableWhenNoConcurrencyService\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_FiltersUnschedulableWhenNoConcurrencyService","Output":"--- PASS: TestOpenAISelectAccountWithLoadAwareness_FiltersUnschedulableWhenNoConcurrencyService (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_FiltersUnschedulableWhenNoConcurrencyService","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_StickyUnschedulableClearsSession"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_StickyUnschedulableClearsSession","Output":"=== RUN TestOpenAISelectAccountForModelWithExclusions_StickyUnschedulableClearsSession\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_StickyUnschedulableClearsSession","Output":"--- PASS: TestOpenAISelectAccountForModelWithExclusions_StickyUnschedulableClearsSession (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_StickyUnschedulableClearsSession","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_StickyOutsideGroupClearsSession"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_StickyOutsideGroupClearsSession","Output":"=== RUN TestOpenAISelectAccountForModelWithExclusions_StickyOutsideGroupClearsSession\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_StickyOutsideGroupClearsSession","Output":"--- PASS: TestOpenAISelectAccountForModelWithExclusions_StickyOutsideGroupClearsSession (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_StickyOutsideGroupClearsSession","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_StickyUnschedulableClearsSession"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_StickyUnschedulableClearsSession","Output":"=== RUN TestOpenAISelectAccountWithLoadAwareness_StickyUnschedulableClearsSession\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_StickyUnschedulableClearsSession","Output":"--- PASS: TestOpenAISelectAccountWithLoadAwareness_StickyUnschedulableClearsSession (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_StickyUnschedulableClearsSession","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_StickyOutsideGroupClearsSession"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_StickyOutsideGroupClearsSession","Output":"=== RUN TestOpenAISelectAccountWithLoadAwareness_StickyOutsideGroupClearsSession\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_StickyOutsideGroupClearsSession","Output":"--- PASS: TestOpenAISelectAccountWithLoadAwareness_StickyOutsideGroupClearsSession (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_StickyOutsideGroupClearsSession","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_NoModelSupport"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_NoModelSupport","Output":"=== RUN TestOpenAISelectAccountForModelWithExclusions_NoModelSupport\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_NoModelSupport","Output":"--- PASS: TestOpenAISelectAccountForModelWithExclusions_NoModelSupport (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_NoModelSupport","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_LoadBatchErrorFallback"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_LoadBatchErrorFallback","Output":"=== RUN TestOpenAISelectAccountWithLoadAwareness_LoadBatchErrorFallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_LoadBatchErrorFallback","Output":"--- PASS: TestOpenAISelectAccountWithLoadAwareness_LoadBatchErrorFallback (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_LoadBatchErrorFallback","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_NoSlotFallbackWait"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_NoSlotFallbackWait","Output":"=== RUN TestOpenAISelectAccountWithLoadAwareness_NoSlotFallbackWait\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_NoSlotFallbackWait","Output":"--- PASS: TestOpenAISelectAccountWithLoadAwareness_NoSlotFallbackWait (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_NoSlotFallbackWait","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_SetsStickyBinding"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_SetsStickyBinding","Output":"=== RUN TestOpenAISelectAccountForModelWithExclusions_SetsStickyBinding\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_SetsStickyBinding","Output":"--- PASS: TestOpenAISelectAccountForModelWithExclusions_SetsStickyBinding (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_SetsStickyBinding","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_StickyWaitPlan"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_StickyWaitPlan","Output":"=== RUN TestOpenAISelectAccountWithLoadAwareness_StickyWaitPlan\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_StickyWaitPlan","Output":"--- PASS: TestOpenAISelectAccountWithLoadAwareness_StickyWaitPlan (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_StickyWaitPlan","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_StickyCapacitySpilloverKeepsBinding"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_StickyCapacitySpilloverKeepsBinding","Output":"=== RUN TestOpenAISelectAccountWithLoadAwareness_StickyCapacitySpilloverKeepsBinding\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_StickyCapacitySpilloverKeepsBinding","Output":"--- PASS: TestOpenAISelectAccountWithLoadAwareness_StickyCapacitySpilloverKeepsBinding (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_StickyCapacitySpilloverKeepsBinding","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_PrefersLowerLoad"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_PrefersLowerLoad","Output":"=== RUN TestOpenAISelectAccountWithLoadAwareness_PrefersLowerLoad\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_PrefersLowerLoad","Output":"--- PASS: TestOpenAISelectAccountWithLoadAwareness_PrefersLowerLoad (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_PrefersLowerLoad","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_StickyExcludedFallback"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_StickyExcludedFallback","Output":"=== RUN TestOpenAISelectAccountForModelWithExclusions_StickyExcludedFallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_StickyExcludedFallback","Output":"--- PASS: TestOpenAISelectAccountForModelWithExclusions_StickyExcludedFallback (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_StickyExcludedFallback","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_StickyNonOpenAI"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_StickyNonOpenAI","Output":"=== RUN TestOpenAISelectAccountForModelWithExclusions_StickyNonOpenAI\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_StickyNonOpenAI","Output":"--- PASS: TestOpenAISelectAccountForModelWithExclusions_StickyNonOpenAI (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_StickyNonOpenAI","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_NoAccounts"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_NoAccounts","Output":"=== RUN TestOpenAISelectAccountForModelWithExclusions_NoAccounts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_NoAccounts","Output":"--- PASS: TestOpenAISelectAccountForModelWithExclusions_NoAccounts (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_NoAccounts","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_NoCandidates"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_NoCandidates","Output":"=== RUN TestOpenAISelectAccountWithLoadAwareness_NoCandidates\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_NoCandidates","Output":"--- PASS: TestOpenAISelectAccountWithLoadAwareness_NoCandidates (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_NoCandidates","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_AllFullWaitPlan"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_AllFullWaitPlan","Output":"=== RUN TestOpenAISelectAccountWithLoadAwareness_AllFullWaitPlan\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_AllFullWaitPlan","Output":"--- PASS: TestOpenAISelectAccountWithLoadAwareness_AllFullWaitPlan (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_AllFullWaitPlan","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_LoadBatchErrorNoAcquire"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_LoadBatchErrorNoAcquire","Output":"=== RUN TestOpenAISelectAccountWithLoadAwareness_LoadBatchErrorNoAcquire\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_LoadBatchErrorNoAcquire","Output":"--- PASS: TestOpenAISelectAccountWithLoadAwareness_LoadBatchErrorNoAcquire (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_LoadBatchErrorNoAcquire","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_MissingLoadInfo"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_MissingLoadInfo","Output":"=== RUN TestOpenAISelectAccountWithLoadAwareness_MissingLoadInfo\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_MissingLoadInfo","Output":"--- PASS: TestOpenAISelectAccountWithLoadAwareness_MissingLoadInfo (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_MissingLoadInfo","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_LeastRecentlyUsed"}
- {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_LeastRecentlyUsed","Output":"=== RUN TestOpenAISelectAccountForModelWithExclusions_LeastRecentlyUsed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.510211+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_LeastRecentlyUsed","Output":"--- PASS: TestOpenAISelectAccountForModelWithExclusions_LeastRecentlyUsed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.510211+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_LeastRecentlyUsed","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.510211+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_PreferNeverUsed"}
- {"Time":"2026-09-12T11:38:45.510211+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_PreferNeverUsed","Output":"=== RUN TestOpenAISelectAccountWithLoadAwareness_PreferNeverUsed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.510211+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_PreferNeverUsed","Output":"--- PASS: TestOpenAISelectAccountWithLoadAwareness_PreferNeverUsed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:45.510211+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_PreferNeverUsed","Elapsed":0}
- {"Time":"2026-09-12T11:38:45.510211+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingTimeout"}
- {"Time":"2026-09-12T11:38:45.510211+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingTimeout","Output":"=== RUN TestOpenAIStreamingTimeout\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingTimeout","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:46.510Z\",\"msg\":\"Stream data interval timeout: account=1 model=model interval=1s\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingTimeout","Output":"--- PASS: TestOpenAIStreamingTimeout (1.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingTimeout","Elapsed":1}
- {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingContextCanceledReturnsIncompleteErrorWithoutInjectingErrorEvent"}
- {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingContextCanceledReturnsIncompleteErrorWithoutInjectingErrorEvent","Output":"=== RUN TestOpenAIStreamingContextCanceledReturnsIncompleteErrorWithoutInjectingErrorEvent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingContextCanceledReturnsIncompleteErrorWithoutInjectingErrorEvent","Output":"--- PASS: TestOpenAIStreamingContextCanceledReturnsIncompleteErrorWithoutInjectingErrorEvent (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingContextCanceledReturnsIncompleteErrorWithoutInjectingErrorEvent","Elapsed":0}
- {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingReadErrorBeforeOutputReturnsFailover"}
- {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingReadErrorBeforeOutputReturnsFailover","Output":"=== RUN TestOpenAIStreamingReadErrorBeforeOutputReturnsFailover\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingReadErrorBeforeOutputReturnsFailover","Output":"--- PASS: TestOpenAIStreamingReadErrorBeforeOutputReturnsFailover (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingReadErrorBeforeOutputReturnsFailover","Elapsed":0}
- {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPostOutputDisconnectQuarantinesSharedProxyWithoutSameStreamFailover"}
- {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPostOutputDisconnectQuarantinesSharedProxyWithoutSameStreamFailover","Output":"=== RUN TestOpenAIStreamingPostOutputDisconnectQuarantinesSharedProxyWithoutSameStreamFailover\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPostOutputDisconnectQuarantinesSharedProxyWithoutSameStreamFailover","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:46.510Z\",\"msg\":\"openai.proxy_quarantined_stream_disconnect\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"proxy_id\":4698,\"account_id\":469801,\"until\":\"2026-09-12T03:48:46.510Z\",\"upstream_request_id\":\"rid-proxy-disconnect\",\"error\":\"http2: client connection lost\"}\n"}
- {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPostOutputDisconnectQuarantinesSharedProxyWithoutSameStreamFailover","Output":"--- PASS: TestOpenAIStreamingPostOutputDisconnectQuarantinesSharedProxyWithoutSameStreamFailover (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPostOutputDisconnectQuarantinesSharedProxyWithoutSameStreamFailover","Elapsed":0}
- {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingTerminalAndClientCancellationDoNotQuarantineProxy"}
- {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingTerminalAndClientCancellationDoNotQuarantineProxy","Output":"=== RUN TestOpenAIStreamingTerminalAndClientCancellationDoNotQuarantineProxy\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingTerminalAndClientCancellationDoNotQuarantineProxy","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:46.510Z\",\"msg\":\"Upstream scan ended after terminal event: unexpected EOF\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingTerminalAndClientCancellationDoNotQuarantineProxy","Output":"--- PASS: TestOpenAIStreamingTerminalAndClientCancellationDoNotQuarantineProxy (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingTerminalAndClientCancellationDoNotQuarantineProxy","Elapsed":0}
- {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedBeforeOutputReturnsFailover"}
- {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedBeforeOutputReturnsFailover","Output":"=== RUN TestOpenAIStreamingResponseFailedBeforeOutputReturnsFailover\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedBeforeOutputReturnsFailover","Output":"--- PASS: TestOpenAIStreamingResponseFailedBeforeOutputReturnsFailover (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedBeforeOutputReturnsFailover","Elapsed":0}
- {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedBeforeOutputCapacityErrorReturnsFailover"}
- {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedBeforeOutputCapacityErrorReturnsFailover","Output":"=== RUN TestOpenAIStreamingResponseFailedBeforeOutputCapacityErrorReturnsFailover\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedBeforeOutputCapacityErrorReturnsFailover","Output":"--- PASS: TestOpenAIStreamingResponseFailedBeforeOutputCapacityErrorReturnsFailover (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedBeforeOutputCapacityErrorReturnsFailover","Elapsed":0}
- {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedBeforeOutputServerOverloadedCodeReturnsFailover"}
- {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedBeforeOutputServerOverloadedCodeReturnsFailover","Output":"=== RUN TestOpenAIStreamingResponseFailedBeforeOutputServerOverloadedCodeReturnsFailover\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedBeforeOutputServerOverloadedCodeReturnsFailover","Output":"--- PASS: TestOpenAIStreamingResponseFailedBeforeOutputServerOverloadedCodeReturnsFailover (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedBeforeOutputServerOverloadedCodeReturnsFailover","Elapsed":0}
- {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedBeforeOutputRateLimitUsesPoolRetryPolicy"}
- {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedBeforeOutputRateLimitUsesPoolRetryPolicy","Output":"=== RUN TestOpenAIStreamingResponseFailedBeforeOutputRateLimitUsesPoolRetryPolicy\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedBeforeOutputRateLimitUsesPoolRetryPolicy","Output":"--- PASS: TestOpenAIStreamingResponseFailedBeforeOutputRateLimitUsesPoolRetryPolicy (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedBeforeOutputRateLimitUsesPoolRetryPolicy","Elapsed":0}
- {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedRateLimitDoesNotBlockAccountScheduling"}
- {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedRateLimitDoesNotBlockAccountScheduling","Output":"=== RUN TestOpenAIStreamingResponseFailedRateLimitDoesNotBlockAccountScheduling\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedRateLimitDoesNotBlockAccountScheduling","Output":"--- PASS: TestOpenAIStreamingResponseFailedRateLimitDoesNotBlockAccountScheduling (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedRateLimitDoesNotBlockAccountScheduling","Elapsed":0}
- {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedAfterOutputSanitizesVerboseResponseForClient"}
- {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedAfterOutputSanitizesVerboseResponseForClient","Output":"=== RUN TestOpenAIStreamingResponseFailedAfterOutputSanitizesVerboseResponseForClient\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedAfterOutputSanitizesVerboseResponseForClient","Output":"--- PASS: TestOpenAIStreamingResponseFailedAfterOutputSanitizesVerboseResponseForClient (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedAfterOutputSanitizesVerboseResponseForClient","Elapsed":0}
- {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingContextWindowResponseFailedBeforeOutputPassesThrough"}
- {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingContextWindowResponseFailedBeforeOutputPassesThrough","Output":"=== RUN TestOpenAIStreamingContextWindowResponseFailedBeforeOutputPassesThrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingContextWindowResponseFailedBeforeOutputPassesThrough","Output":"--- PASS: TestOpenAIStreamingContextWindowResponseFailedBeforeOutputPassesThrough (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingContextWindowResponseFailedBeforeOutputPassesThrough","Elapsed":0}
- {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingContextWindowResponseFailedBeforeOutputAppliesPassthroughRule"}
- {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingContextWindowResponseFailedBeforeOutputAppliesPassthroughRule","Output":"=== RUN TestOpenAIStreamingContextWindowResponseFailedBeforeOutputAppliesPassthroughRule\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingContextWindowResponseFailedBeforeOutputAppliesPassthroughRule","Output":"--- PASS: TestOpenAIStreamingContextWindowResponseFailedBeforeOutputAppliesPassthroughRule (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingContextWindowResponseFailedBeforeOutputAppliesPassthroughRule","Elapsed":0}
- {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPreambleOnlyMissingTerminalReturnsFailover"}
- {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPreambleOnlyMissingTerminalReturnsFailover","Output":"=== RUN TestOpenAIStreamingPreambleOnlyMissingTerminalReturnsFailover\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPreambleOnlyMissingTerminalReturnsFailover","Output":"--- PASS: TestOpenAIStreamingPreambleOnlyMissingTerminalReturnsFailover (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPreambleOnlyMissingTerminalReturnsFailover","Elapsed":0}
- {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPreambleKeepaliveUsesDownstreamIdle"}
- {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPreambleKeepaliveUsesDownstreamIdle","Output":"=== RUN TestOpenAIStreamingPreambleKeepaliveUsesDownstreamIdle\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPreambleKeepaliveUsesDownstreamIdle","Output":"--- PASS: TestOpenAIStreamingPreambleKeepaliveUsesDownstreamIdle (1.35s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPreambleKeepaliveUsesDownstreamIdle","Elapsed":1.35}
- {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingNormalizesTerminalOutputFromDeltas"}
- {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingNormalizesTerminalOutputFromDeltas","Output":"=== RUN TestOpenAIStreamingNormalizesTerminalOutputFromDeltas\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingNormalizesTerminalOutputFromDeltas","Output":"--- PASS: TestOpenAIStreamingNormalizesTerminalOutputFromDeltas (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingNormalizesTerminalOutputFromDeltas","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingNormalizesTerminalOutputToEmptyArray"}
- {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingNormalizesTerminalOutputToEmptyArray","Output":"=== RUN TestOpenAIStreamingNormalizesTerminalOutputToEmptyArray\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingNormalizesTerminalOutputToEmptyArray","Output":"--- PASS: TestOpenAIStreamingNormalizesTerminalOutputToEmptyArray (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingNormalizesTerminalOutputToEmptyArray","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPolicyResponseFailedBeforeOutputPassesThrough"}
- {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPolicyResponseFailedBeforeOutputPassesThrough","Output":"=== RUN TestOpenAIStreamingPolicyResponseFailedBeforeOutputPassesThrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPolicyResponseFailedBeforeOutputPassesThrough","Output":"--- PASS: TestOpenAIStreamingPolicyResponseFailedBeforeOutputPassesThrough (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPolicyResponseFailedBeforeOutputPassesThrough","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingClientDisconnectDrainsUpstreamUsage"}
- {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingClientDisconnectDrainsUpstreamUsage","Output":"=== RUN TestOpenAIStreamingClientDisconnectDrainsUpstreamUsage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingClientDisconnectDrainsUpstreamUsage","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.862Z\",\"msg\":\"Client disconnected during streaming flush, continuing to drain upstream for billing\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingClientDisconnectDrainsUpstreamUsage","Output":"--- PASS: TestOpenAIStreamingClientDisconnectDrainsUpstreamUsage (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingClientDisconnectDrainsUpstreamUsage","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingMissingTerminalEventReturnsIncompleteError"}
- {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingMissingTerminalEventReturnsIncompleteError","Output":"=== RUN TestOpenAIStreamingMissingTerminalEventReturnsIncompleteError\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingMissingTerminalEventReturnsIncompleteError","Output":"--- PASS: TestOpenAIStreamingMissingTerminalEventReturnsIncompleteError (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingMissingTerminalEventReturnsIncompleteError","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughMissingTerminalEventReturnsIncompleteError"}
- {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughMissingTerminalEventReturnsIncompleteError","Output":"=== RUN TestOpenAIStreamingPassthroughMissingTerminalEventReturnsIncompleteError\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughMissingTerminalEventReturnsIncompleteError","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.863Z\",\"msg\":\"OpenAI passthrough 上游流在未收到 [DONE] 时结束,疑似断流\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":1,\"upstream_request_id\":\"\"}\n"}
- {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughMissingTerminalEventReturnsIncompleteError","Output":"--- PASS: TestOpenAIStreamingPassthroughMissingTerminalEventReturnsIncompleteError (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughMissingTerminalEventReturnsIncompleteError","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughPostOutputDisconnectQuarantinesSharedProxy"}
- {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughPostOutputDisconnectQuarantinesSharedProxy","Output":"=== RUN TestOpenAIStreamingPassthroughPostOutputDisconnectQuarantinesSharedProxy\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughPostOutputDisconnectQuarantinesSharedProxy","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.863Z\",\"msg\":\"[OpenAI passthrough] 流读取异常中断: account=469804 request_id=rid-passthrough-proxy-disconnect err=unexpected EOF\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughPostOutputDisconnectQuarantinesSharedProxy","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:47.863Z\",\"msg\":\"openai.proxy_quarantined_stream_disconnect\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"proxy_id\":4698,\"account_id\":469804,\"until\":\"2026-09-12T03:48:47.863Z\",\"upstream_request_id\":\"rid-passthrough-proxy-disconnect\",\"error\":\"http2: client connection lost\"}\n"}
- {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughPostOutputDisconnectQuarantinesSharedProxy","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.863Z\",\"msg\":\"[OpenAI passthrough] 流读取异常中断: account=469804 request_id=rid-passthrough-proxy-disconnect err=http2: client connection lost\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughPostOutputDisconnectQuarantinesSharedProxy","Output":"--- PASS: TestOpenAIStreamingPassthroughPostOutputDisconnectQuarantinesSharedProxy (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughPostOutputDisconnectQuarantinesSharedProxy","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughResponseFailedBeforeOutputReturnsFailover"}
- {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughResponseFailedBeforeOutputReturnsFailover","Output":"=== RUN TestOpenAIStreamingPassthroughResponseFailedBeforeOutputReturnsFailover\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughResponseFailedBeforeOutputReturnsFailover","Output":"--- PASS: TestOpenAIStreamingPassthroughResponseFailedBeforeOutputReturnsFailover (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughResponseFailedBeforeOutputReturnsFailover","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughContextWindowResponseFailedBeforeOutputAppliesPassthroughRule"}
- {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughContextWindowResponseFailedBeforeOutputAppliesPassthroughRule","Output":"=== RUN TestOpenAIStreamingPassthroughContextWindowResponseFailedBeforeOutputAppliesPassthroughRule\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughContextWindowResponseFailedBeforeOutputAppliesPassthroughRule","Output":"--- PASS: TestOpenAIStreamingPassthroughContextWindowResponseFailedBeforeOutputAppliesPassthroughRule (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughContextWindowResponseFailedBeforeOutputAppliesPassthroughRule","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughContextWindowResponseFailedBeforeOutputWithoutRulePassesThrough"}
- {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughContextWindowResponseFailedBeforeOutputWithoutRulePassesThrough","Output":"=== RUN TestOpenAIStreamingPassthroughContextWindowResponseFailedBeforeOutputWithoutRulePassesThrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughContextWindowResponseFailedBeforeOutputWithoutRulePassesThrough","Output":"--- PASS: TestOpenAIStreamingPassthroughContextWindowResponseFailedBeforeOutputWithoutRulePassesThrough (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughContextWindowResponseFailedBeforeOutputWithoutRulePassesThrough","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughResponseFailedAfterOutputSanitizesVerboseResponseForClient"}
- {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughResponseFailedAfterOutputSanitizesVerboseResponseForClient","Output":"=== RUN TestOpenAIStreamingPassthroughResponseFailedAfterOutputSanitizesVerboseResponseForClient\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughResponseFailedAfterOutputSanitizesVerboseResponseForClient","Output":"--- PASS: TestOpenAIStreamingPassthroughResponseFailedAfterOutputSanitizesVerboseResponseForClient (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughResponseFailedAfterOutputSanitizesVerboseResponseForClient","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughResponseDoneWithoutDoneMarkerStillSucceeds"}
- {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughResponseDoneWithoutDoneMarkerStillSucceeds","Output":"=== RUN TestOpenAIStreamingPassthroughResponseDoneWithoutDoneMarkerStillSucceeds\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughResponseDoneWithoutDoneMarkerStillSucceeds","Output":"--- PASS: TestOpenAIStreamingPassthroughResponseDoneWithoutDoneMarkerStillSucceeds (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughResponseDoneWithoutDoneMarkerStillSucceeds","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughResponseIncompleteWithoutDoneMarkerStillSucceeds"}
- {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughResponseIncompleteWithoutDoneMarkerStillSucceeds","Output":"=== RUN TestOpenAIStreamingPassthroughResponseIncompleteWithoutDoneMarkerStillSucceeds\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughResponseIncompleteWithoutDoneMarkerStillSucceeds","Output":"--- PASS: TestOpenAIStreamingPassthroughResponseIncompleteWithoutDoneMarkerStillSucceeds (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughResponseIncompleteWithoutDoneMarkerStillSucceeds","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingTooLong"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingTooLong","Output":"=== RUN TestOpenAIStreamingTooLong\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingTooLong","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:38:47.863Z\",\"msg\":\"SSE line too long: account=2 max_size=65536 error=bufio.Scanner: token too long\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).handleStreamingResponseWithReasoning.func13\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_response_handling.go:452\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).handleStreamingResponseWithReasoning\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_response_handling.go:808\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).handleStreamingResponse\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_response_handling.go:48\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIStreamingTooLong\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingTooLong","Output":"/internal/service/openai_gateway_service_test.go:2737\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingTooLong","Output":"--- PASS: TestOpenAIStreamingTooLong (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingTooLong","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINonStreamingContentTypePassThrough"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINonStreamingContentTypePassThrough","Output":"=== RUN TestOpenAINonStreamingContentTypePassThrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINonStreamingContentTypePassThrough","Output":"--- PASS: TestOpenAINonStreamingContentTypePassThrough (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINonStreamingContentTypePassThrough","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINonStreamingContentTypeDefault"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINonStreamingContentTypeDefault","Output":"=== RUN TestOpenAINonStreamingContentTypeDefault\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINonStreamingContentTypeDefault","Output":"--- PASS: TestOpenAINonStreamingContentTypeDefault (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINonStreamingContentTypeDefault","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingHeadersOverride"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingHeadersOverride","Output":"=== RUN TestOpenAIStreamingHeadersOverride\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingHeadersOverride","Output":"--- PASS: TestOpenAIStreamingHeadersOverride (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingHeadersOverride","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingReuseScannerBufferAndStillWorks"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingReuseScannerBufferAndStillWorks","Output":"=== RUN TestOpenAIStreamingReuseScannerBufferAndStillWorks\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingReuseScannerBufferAndStillWorks","Output":"--- PASS: TestOpenAIStreamingReuseScannerBufferAndStillWorks (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingReuseScannerBufferAndStillWorks","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInvalidBaseURLWhenAllowlistDisabled"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInvalidBaseURLWhenAllowlistDisabled","Output":"=== RUN TestOpenAIInvalidBaseURLWhenAllowlistDisabled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInvalidBaseURLWhenAllowlistDisabled","Output":"--- PASS: TestOpenAIInvalidBaseURLWhenAllowlistDisabled (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInvalidBaseURLWhenAllowlistDisabled","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIValidateUpstreamBaseURLDisabledRequiresHTTPS"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIValidateUpstreamBaseURLDisabledRequiresHTTPS","Output":"=== RUN TestOpenAIValidateUpstreamBaseURLDisabledRequiresHTTPS\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIValidateUpstreamBaseURLDisabledRequiresHTTPS","Output":"--- PASS: TestOpenAIValidateUpstreamBaseURLDisabledRequiresHTTPS (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIValidateUpstreamBaseURLDisabledRequiresHTTPS","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIValidateUpstreamBaseURLDisabledAllowsHTTP"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIValidateUpstreamBaseURLDisabledAllowsHTTP","Output":"=== RUN TestOpenAIValidateUpstreamBaseURLDisabledAllowsHTTP\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIValidateUpstreamBaseURLDisabledAllowsHTTP","Output":"--- PASS: TestOpenAIValidateUpstreamBaseURLDisabledAllowsHTTP (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIValidateUpstreamBaseURLDisabledAllowsHTTP","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIValidateUpstreamBaseURLEnabledEnforcesAllowlist"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIValidateUpstreamBaseURLEnabledEnforcesAllowlist","Output":"=== RUN TestOpenAIValidateUpstreamBaseURLEnabledEnforcesAllowlist\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIValidateUpstreamBaseURLEnabledEnforcesAllowlist","Output":"--- PASS: TestOpenAIValidateUpstreamBaseURLEnabledEnforcesAllowlist (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIValidateUpstreamBaseURLEnabledEnforcesAllowlist","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpdateCodexUsageSnapshotFromHeaders"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpdateCodexUsageSnapshotFromHeaders","Output":"=== RUN TestOpenAIUpdateCodexUsageSnapshotFromHeaders\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpdateCodexUsageSnapshotFromHeaders","Output":"--- PASS: TestOpenAIUpdateCodexUsageSnapshotFromHeaders (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpdateCodexUsageSnapshotFromHeaders","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix","Output":"=== RUN TestOpenAIResponsesRequestPathSuffix\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/exact_v1_responses"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/exact_v1_responses","Output":"=== RUN TestOpenAIResponsesRequestPathSuffix/exact_v1_responses\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/exact_v1_responses","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffix/exact_v1_responses (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/exact_v1_responses","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/compact_v1_responses"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/compact_v1_responses","Output":"=== RUN TestOpenAIResponsesRequestPathSuffix/compact_v1_responses\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/compact_v1_responses","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffix/compact_v1_responses (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/compact_v1_responses","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/compact_alias_responses"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/compact_alias_responses","Output":"=== RUN TestOpenAIResponsesRequestPathSuffix/compact_alias_responses\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/compact_alias_responses","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffix/compact_alias_responses (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/compact_alias_responses","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/nested_suffix"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/nested_suffix","Output":"=== RUN TestOpenAIResponsesRequestPathSuffix/nested_suffix\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/nested_suffix","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffix/nested_suffix (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/nested_suffix","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/unrelated_path"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/unrelated_path","Output":"=== RUN TestOpenAIResponsesRequestPathSuffix/unrelated_path\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/unrelated_path","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffix/unrelated_path (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/unrelated_path","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffix (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompactRequestBodyPreservesCurrentCodexPayloadFields"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompactRequestBodyPreservesCurrentCodexPayloadFields","Output":"=== RUN TestNormalizeOpenAICompactRequestBodyPreservesCurrentCodexPayloadFields\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompactRequestBodyPreservesCurrentCodexPayloadFields","Output":"--- PASS: TestNormalizeOpenAICompactRequestBodyPreservesCurrentCodexPayloadFields (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompactRequestBodyPreservesCurrentCodexPayloadFields","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompactRequestBodyDropsParallelToolCallsWithoutUsableTools"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompactRequestBodyDropsParallelToolCallsWithoutUsableTools","Output":"=== RUN TestNormalizeOpenAICompactRequestBodyDropsParallelToolCallsWithoutUsableTools\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompactRequestBodyDropsParallelToolCallsWithoutUsableTools","Output":"--- PASS: TestNormalizeOpenAICompactRequestBodyDropsParallelToolCallsWithoutUsableTools (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompactRequestBodyDropsParallelToolCallsWithoutUsableTools","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOpenAIPassthroughPreservesCompactPath"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOpenAIPassthroughPreservesCompactPath","Output":"=== RUN TestOpenAIBuildUpstreamRequestOpenAIPassthroughPreservesCompactPath\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOpenAIPassthroughPreservesCompactPath","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.863Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":0,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOpenAIPassthroughPreservesCompactPath","Output":"--- PASS: TestOpenAIBuildUpstreamRequestOpenAIPassthroughPreservesCompactPath (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOpenAIPassthroughPreservesCompactPath","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOpenAIPassthroughPreservesExplicitAPIKeyBetaHeader"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOpenAIPassthroughPreservesExplicitAPIKeyBetaHeader","Output":"=== RUN TestOpenAIBuildUpstreamRequestOpenAIPassthroughPreservesExplicitAPIKeyBetaHeader\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOpenAIPassthroughPreservesExplicitAPIKeyBetaHeader","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.863Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":0,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOpenAIPassthroughPreservesExplicitAPIKeyBetaHeader","Output":"--- PASS: TestOpenAIBuildUpstreamRequestOpenAIPassthroughPreservesExplicitAPIKeyBetaHeader (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOpenAIPassthroughPreservesExplicitAPIKeyBetaHeader","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestCompactForcesJSONAcceptForOAuth"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestCompactForcesJSONAcceptForOAuth","Output":"=== RUN TestOpenAIBuildUpstreamRequestCompactForcesJSONAcceptForOAuth\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestCompactForcesJSONAcceptForOAuth","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.863Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":0,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestCompactForcesJSONAcceptForOAuth","Output":"--- PASS: TestOpenAIBuildUpstreamRequestCompactForcesJSONAcceptForOAuth (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestCompactForcesJSONAcceptForOAuth","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthMessagesBridgeUsesSessionOnly"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthMessagesBridgeUsesSessionOnly","Output":"=== RUN TestOpenAIBuildUpstreamRequestOAuthMessagesBridgeUsesSessionOnly\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthMessagesBridgeUsesSessionOnly","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.863Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":0,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthMessagesBridgeUsesSessionOnly","Output":"--- PASS: TestOpenAIBuildUpstreamRequestOAuthMessagesBridgeUsesSessionOnly (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthMessagesBridgeUsesSessionOnly","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestPreservesCompactPathForAPIKeyBaseURL"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestPreservesCompactPathForAPIKeyBaseURL","Output":"=== RUN TestOpenAIBuildUpstreamRequestPreservesCompactPathForAPIKeyBaseURL\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestPreservesCompactPathForAPIKeyBaseURL","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.863Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":0,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestPreservesCompactPathForAPIKeyBaseURL","Output":"--- PASS: TestOpenAIBuildUpstreamRequestPreservesCompactPathForAPIKeyBaseURL (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestPreservesCompactPathForAPIKeyBaseURL","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestPreservesCodexIdentityHeaders"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestPreservesCodexIdentityHeaders","Output":"=== RUN TestOpenAIBuildUpstreamRequestPreservesCodexIdentityHeaders\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestPreservesCodexIdentityHeaders","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.864Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":0,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestPreservesCodexIdentityHeaders","Output":"--- PASS: TestOpenAIBuildUpstreamRequestPreservesCodexIdentityHeaders (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestPreservesCodexIdentityHeaders","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility","Output":"=== RUN TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/official_desktop_ua"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/official_desktop_ua","Output":"=== RUN TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/official_desktop_ua\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/official_desktop_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.864Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":0,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/official_desktop_ua","Output":"--- PASS: TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/official_desktop_ua (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/official_desktop_ua","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/mismatched_originator"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/mismatched_originator","Output":"=== RUN TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/mismatched_originator\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/mismatched_originator","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.864Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":0,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/mismatched_originator","Output":"--- PASS: TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/mismatched_originator (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/mismatched_originator","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/tui_identity"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/tui_identity","Output":"=== RUN TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/tui_identity\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/tui_identity","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.864Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":0,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/tui_identity","Output":"--- PASS: TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/tui_identity (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/tui_identity","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/official_originator_without_ua"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/official_originator_without_ua","Output":"=== RUN TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/official_originator_without_ua\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/official_originator_without_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.864Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":0,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/official_originator_without_ua","Output":"--- PASS: TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/official_originator_without_ua (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/official_originator_without_ua","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/third-party_ua"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/third-party_ua","Output":"=== RUN TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/third-party_ua\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/third-party_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.864Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":0,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/third-party_ua","Output":"--- PASS: TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/third-party_ua (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/third-party_ua","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility","Output":"--- PASS: TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine","Output":"=== RUN TestExtractOpenAISSEDataLine\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine/标准格式"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine/标准格式","Output":"=== RUN TestExtractOpenAISSEDataLine/标准格式\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine/标准格式","Output":"--- PASS: TestExtractOpenAISSEDataLine/标准格式 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine/标准格式","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine/无空格格式"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine/无空格格式","Output":"=== RUN TestExtractOpenAISSEDataLine/无空格格式\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine/无空格格式","Output":"--- PASS: TestExtractOpenAISSEDataLine/无空格格式 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine/无空格格式","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine/纯空数据"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine/纯空数据","Output":"=== RUN TestExtractOpenAISSEDataLine/纯空数据\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine/纯空数据","Output":"--- PASS: TestExtractOpenAISSEDataLine/纯空数据 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine/纯空数据","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine/非_data_行"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine/非_data_行","Output":"=== RUN TestExtractOpenAISSEDataLine/非_data_行\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine/非_data_行","Output":"--- PASS: TestExtractOpenAISSEDataLine/非_data_行 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine/非_data_行","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine","Output":"--- PASS: TestExtractOpenAISSEDataLine (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_AcceptsResponseAndChatUsageShapes"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_AcceptsResponseAndChatUsageShapes","Output":"=== RUN TestExtractOpenAIUsageFromJSONBytes_AcceptsResponseAndChatUsageShapes\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_AcceptsResponseAndChatUsageShapes","Output":"--- PASS: TestExtractOpenAIUsageFromJSONBytes_AcceptsResponseAndChatUsageShapes (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_AcceptsResponseAndChatUsageShapes","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_IncludesGrokReasoningTokens"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_IncludesGrokReasoningTokens","Output":"=== RUN TestExtractOpenAIUsageFromJSONBytes_IncludesGrokReasoningTokens\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_IncludesGrokReasoningTokens","Output":"--- PASS: TestExtractOpenAIUsageFromJSONBytes_IncludesGrokReasoningTokens (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_IncludesGrokReasoningTokens","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractCodexFinalResponse_SampleReplay"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractCodexFinalResponse_SampleReplay","Output":"=== RUN TestExtractCodexFinalResponse_SampleReplay\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractCodexFinalResponse_SampleReplay","Output":"--- PASS: TestExtractCodexFinalResponse_SampleReplay (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractCodexFinalResponse_SampleReplay","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatSSEFrameParserResetsEventTypeAtFrameBoundary"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatSSEFrameParserResetsEventTypeAtFrameBoundary","Output":"=== RUN TestOpenAICompatSSEFrameParserResetsEventTypeAtFrameBoundary\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatSSEFrameParserResetsEventTypeAtFrameBoundary","Output":"--- PASS: TestOpenAICompatSSEFrameParserResetsEventTypeAtFrameBoundary (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatSSEFrameParserResetsEventTypeAtFrameBoundary","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrection"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrection","Output":"=== RUN TestOpenAIGatewayService_ToolCorrection\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrection/correct_apply_patch_in_response_body"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrection/correct_apply_patch_in_response_body","Output":"=== RUN TestOpenAIGatewayService_ToolCorrection/correct_apply_patch_in_response_body\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrection/correct_apply_patch_in_response_body","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.864Z\",\"msg\":\"[CodexToolCorrector] Corrected tool call: apply_patch -\u003e edit (total: 1)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_tool_corrector\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrection/correct_apply_patch_in_response_body","Output":"--- PASS: TestOpenAIGatewayService_ToolCorrection/correct_apply_patch_in_response_body (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrection/correct_apply_patch_in_response_body","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrection/correct_update_plan_in_response_body"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrection/correct_update_plan_in_response_body","Output":"=== RUN TestOpenAIGatewayService_ToolCorrection/correct_update_plan_in_response_body\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrection/correct_update_plan_in_response_body","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.864Z\",\"msg\":\"[CodexToolCorrector] Corrected tool call: update_plan -\u003e todowrite (total: 2)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_tool_corrector\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrection/correct_update_plan_in_response_body","Output":"--- PASS: TestOpenAIGatewayService_ToolCorrection/correct_update_plan_in_response_body (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrection/correct_update_plan_in_response_body","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrection/no_change_for_correct_tool_name"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrection/no_change_for_correct_tool_name","Output":"=== RUN TestOpenAIGatewayService_ToolCorrection/no_change_for_correct_tool_name\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrection/no_change_for_correct_tool_name","Output":"--- PASS: TestOpenAIGatewayService_ToolCorrection/no_change_for_correct_tool_name (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrection/no_change_for_correct_tool_name","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrection","Output":"--- PASS: TestOpenAIGatewayService_ToolCorrection (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrection","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrectorInitialization"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrectorInitialization","Output":"=== RUN TestOpenAIGatewayService_ToolCorrectorInitialization\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrectorInitialization","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.864Z\",\"msg\":\"[CodexToolCorrector] Corrected tool call: apply_patch -\u003e edit (total: 1)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_tool_corrector\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrectorInitialization","Output":"--- PASS: TestOpenAIGatewayService_ToolCorrectorInitialization (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrectorInitialization","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels","Output":"=== RUN TestNormalizeOpenAIReasoningEffortForMaxCapableModels\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Astra_保留_max"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Astra_保留_max","Output":"=== RUN TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Astra_保留_max\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Astra_保留_max","Output":"--- PASS: TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Astra_保留_max (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Astra_保留_max","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Sol_保留_max"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Sol_保留_max","Output":"=== RUN TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Sol_保留_max\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Sol_保留_max","Output":"--- PASS: TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Sol_保留_max (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Sol_保留_max","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Terra_保留_max"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Terra_保留_max","Output":"=== RUN TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Terra_保留_max\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Terra_保留_max","Output":"--- PASS: TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Terra_保留_max (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Terra_保留_max","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Luna_后缀保留_max"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Luna_后缀保留_max","Output":"=== RUN TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Luna_后缀保留_max\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Luna_后缀保留_max","Output":"--- PASS: TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Luna_后缀保留_max (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Luna_后缀保留_max","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/DeepSeek_V4_保留_max"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/DeepSeek_V4_保留_max","Output":"=== RUN TestNormalizeOpenAIReasoningEffortForMaxCapableModels/DeepSeek_V4_保留_max\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/DeepSeek_V4_保留_max","Output":"--- PASS: TestNormalizeOpenAIReasoningEffortForMaxCapableModels/DeepSeek_V4_保留_max (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/DeepSeek_V4_保留_max","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/旧_GPT_模型沿用_xhigh"}
- {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/旧_GPT_模型沿用_xhigh","Output":"=== RUN TestNormalizeOpenAIReasoningEffortForMaxCapableModels/旧_GPT_模型沿用_xhigh\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/旧_GPT_模型沿用_xhigh","Output":"--- PASS: TestNormalizeOpenAIReasoningEffortForMaxCapableModels/旧_GPT_模型沿用_xhigh (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/旧_GPT_模型沿用_xhigh","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels","Output":"--- PASS: TestNormalizeOpenAIReasoningEffortForMaxCapableModels (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortDowngradesMax"}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortDowngradesMax","Output":"=== RUN TestNormalizeOpenAICodexCompactReasoningEffortDowngradesMax\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortDowngradesMax","Output":"--- PASS: TestNormalizeOpenAICodexCompactReasoningEffortDowngradesMax (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortDowngradesMax","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility"}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility","Output":"=== RUN TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_OAuth_compact_降级"}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_OAuth_compact_降级","Output":"=== RUN TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_OAuth_compact_降级\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_OAuth_compact_降级","Output":"--- PASS: TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_OAuth_compact_降级 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_OAuth_compact_降级","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_OAuth_普通请求保留"}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_OAuth_普通请求保留","Output":"=== RUN TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_OAuth_普通请求保留\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_OAuth_普通请求保留","Output":"--- PASS: TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_OAuth_普通请求保留 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_OAuth_普通请求保留","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_API_Key_compact_保留"}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_API_Key_compact_保留","Output":"=== RUN TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_API_Key_compact_保留\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_API_Key_compact_保留","Output":"--- PASS: TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_API_Key_compact_保留 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_API_Key_compact_保留","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/Grok_OAuth_compact_保留"}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/Grok_OAuth_compact_保留","Output":"=== RUN TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/Grok_OAuth_compact_保留\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/Grok_OAuth_compact_保留","Output":"--- PASS: TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/Grok_OAuth_compact_保留 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/Grok_OAuth_compact_保留","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility","Output":"--- PASS: TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardPreservesGPT56MaxEffort"}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardPreservesGPT56MaxEffort","Output":"=== RUN TestOpenAIGatewayServiceForwardPreservesGPT56MaxEffort\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardPreservesGPT56MaxEffort","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.864Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":7,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardPreservesGPT56MaxEffort","Output":"--- PASS: TestOpenAIGatewayServiceForwardPreservesGPT56MaxEffort (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardPreservesGPT56MaxEffort","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardPreservesMappedGPT56MaxEffort"}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardPreservesMappedGPT56MaxEffort","Output":"=== RUN TestOpenAIGatewayServiceForwardPreservesMappedGPT56MaxEffort\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardPreservesMappedGPT56MaxEffort","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.864Z\",\"msg\":\"[OpenAI] Model mapping applied: sol -\u003e gpt-5.6-sol (account: openai-apikey-mapped, isCodexCLI: false)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardPreservesMappedGPT56MaxEffort","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.864Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":9,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardPreservesMappedGPT56MaxEffort","Output":"--- PASS: TestOpenAIGatewayServiceForwardPreservesMappedGPT56MaxEffort (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardPreservesMappedGPT56MaxEffort","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardOAuthCompactDowngradesMaxEffort"}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardOAuthCompactDowngradesMaxEffort","Output":"=== RUN TestOpenAIGatewayServiceForwardOAuthCompactDowngradesMaxEffort\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardOAuthCompactDowngradesMaxEffort","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.864Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":8,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.8651496+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardOAuthCompactDowngradesMaxEffort","Output":"--- PASS: TestOpenAIGatewayServiceForwardOAuthCompactDowngradesMaxEffort (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8651496+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardOAuthCompactDowngradesMaxEffort","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8651496+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardOAuthRemoteCompactV2PreservesResponsesWire"}
- {"Time":"2026-09-12T11:38:47.8651496+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardOAuthRemoteCompactV2PreservesResponsesWire","Output":"=== RUN TestOpenAIGatewayServiceForwardOAuthRemoteCompactV2PreservesResponsesWire\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8651496+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardOAuthRemoteCompactV2PreservesResponsesWire","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.865Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":10,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.8657489+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardOAuthRemoteCompactV2PreservesResponsesWire","Output":"--- PASS: TestOpenAIGatewayServiceForwardOAuthRemoteCompactV2PreservesResponsesWire (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8657489+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardOAuthRemoteCompactV2PreservesResponsesWire","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8657489+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardAPIKeyRemoteCompactV2PreservesResponsesWire"}
- {"Time":"2026-09-12T11:38:47.8657489+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardAPIKeyRemoteCompactV2PreservesResponsesWire","Output":"=== RUN TestOpenAIGatewayServiceForwardAPIKeyRemoteCompactV2PreservesResponsesWire\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8657489+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardAPIKeyRemoteCompactV2PreservesResponsesWire","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.865Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":11,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.8657489+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardAPIKeyRemoteCompactV2PreservesResponsesWire","Output":"--- PASS: TestOpenAIGatewayServiceForwardAPIKeyRemoteCompactV2PreservesResponsesWire (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8657489+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardAPIKeyRemoteCompactV2PreservesResponsesWire","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8657489+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage"}
- {"Time":"2026-09-12T11:38:47.8657489+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage","Output":"=== RUN TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8657489+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/guardian"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/guardian","Output":"=== RUN TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/guardian\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/guardian","Output":"--- PASS: TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/guardian (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/guardian","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/review"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/review","Output":"=== RUN TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/review\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/review","Output":"--- PASS: TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/review (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/review","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/GUARDIAN"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/GUARDIAN","Output":"=== RUN TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/GUARDIAN\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/GUARDIAN","Output":"--- PASS: TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/GUARDIAN (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/GUARDIAN","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/metadata_only"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/metadata_only","Output":"=== RUN TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/metadata_only\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/metadata_only","Output":"--- PASS: TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/metadata_only (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/metadata_only","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/websocket_envelope_metadata"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/websocket_envelope_metadata","Output":"=== RUN TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/websocket_envelope_metadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/websocket_envelope_metadata","Output":"--- PASS: TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/websocket_envelope_metadata (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/websocket_envelope_metadata","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/ordinary_subagent"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/ordinary_subagent","Output":"=== RUN TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/ordinary_subagent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/ordinary_subagent","Output":"--- PASS: TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/ordinary_subagent (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/ordinary_subagent","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/missing_parent"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/missing_parent","Output":"=== RUN TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/missing_parent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/missing_parent","Output":"--- PASS: TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/missing_parent (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/missing_parent","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/conflicting_lineage"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/conflicting_lineage","Output":"=== RUN TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/conflicting_lineage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/conflicting_lineage","Output":"--- PASS: TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/conflicting_lineage (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/conflicting_lineage","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/conflicting_subagent"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/conflicting_subagent","Output":"=== RUN TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/conflicting_subagent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/conflicting_subagent","Output":"--- PASS: TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/conflicting_subagent (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/conflicting_subagent","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/ordinary_model"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/ordinary_model","Output":"=== RUN TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/ordinary_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/ordinary_model","Output":"--- PASS: TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/ordinary_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/ordinary_model","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage","Output":"--- PASS: TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers","Output":"=== RUN TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers/legacy"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers/legacy","Output":"=== RUN TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers/legacy\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers/legacy","Output":"--- PASS: TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers/legacy (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers/legacy","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers/advanced"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers/advanced","Output":"=== RUN TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers/advanced\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers/advanced","Output":"--- PASS: TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers/advanced (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers/advanced","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers/advanced_sticky_weighted"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers/advanced_sticky_weighted","Output":"=== RUN TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers/advanced_sticky_weighted\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers/advanced_sticky_weighted","Output":"--- PASS: TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers/advanced_sticky_weighted (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers/advanced_sticky_weighted","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers","Output":"--- PASS: TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityFallsBackWithoutCrossGroupOrFailoverBypass"}
- {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityFallsBackWithoutCrossGroupOrFailoverBypass","Output":"=== RUN TestOpenAIGatewayService_GuardianParentAffinityFallsBackWithoutCrossGroupOrFailoverBypass\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityFallsBackWithoutCrossGroupOrFailoverBypass/parent_moved_out_of_group"}
- {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityFallsBackWithoutCrossGroupOrFailoverBypass/parent_moved_out_of_group","Output":"=== RUN TestOpenAIGatewayService_GuardianParentAffinityFallsBackWithoutCrossGroupOrFailoverBypass/parent_moved_out_of_group\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityFallsBackWithoutCrossGroupOrFailoverBypass/parent_moved_out_of_group","Output":"--- PASS: TestOpenAIGatewayService_GuardianParentAffinityFallsBackWithoutCrossGroupOrFailoverBypass/parent_moved_out_of_group (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityFallsBackWithoutCrossGroupOrFailoverBypass/parent_moved_out_of_group","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityFallsBackWithoutCrossGroupOrFailoverBypass/parent_excluded_after_upstream_failure"}
- {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityFallsBackWithoutCrossGroupOrFailoverBypass/parent_excluded_after_upstream_failure","Output":"=== RUN TestOpenAIGatewayService_GuardianParentAffinityFallsBackWithoutCrossGroupOrFailoverBypass/parent_excluded_after_upstream_failure\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityFallsBackWithoutCrossGroupOrFailoverBypass/parent_excluded_after_upstream_failure","Output":"--- PASS: TestOpenAIGatewayService_GuardianParentAffinityFallsBackWithoutCrossGroupOrFailoverBypass/parent_excluded_after_upstream_failure (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityFallsBackWithoutCrossGroupOrFailoverBypass/parent_excluded_after_upstream_failure","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityFallsBackWithoutCrossGroupOrFailoverBypass","Output":"--- PASS: TestOpenAIGatewayService_GuardianParentAffinityFallsBackWithoutCrossGroupOrFailoverBypass (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityFallsBackWithoutCrossGroupOrFailoverBypass","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentHashCollisionPreservesParentBinding"}
- {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentHashCollisionPreservesParentBinding","Output":"=== RUN TestOpenAIGatewayService_GuardianParentHashCollisionPreservesParentBinding\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentHashCollisionPreservesParentBinding/legacy"}
- {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentHashCollisionPreservesParentBinding/legacy","Output":"=== RUN TestOpenAIGatewayService_GuardianParentHashCollisionPreservesParentBinding/legacy\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentHashCollisionPreservesParentBinding/legacy","Output":"--- PASS: TestOpenAIGatewayService_GuardianParentHashCollisionPreservesParentBinding/legacy (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentHashCollisionPreservesParentBinding/legacy","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentHashCollisionPreservesParentBinding/advanced"}
- {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentHashCollisionPreservesParentBinding/advanced","Output":"=== RUN TestOpenAIGatewayService_GuardianParentHashCollisionPreservesParentBinding/advanced\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentHashCollisionPreservesParentBinding/advanced","Output":"--- PASS: TestOpenAIGatewayService_GuardianParentHashCollisionPreservesParentBinding/advanced (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentHashCollisionPreservesParentBinding/advanced","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentHashCollisionPreservesParentBinding","Output":"--- PASS: TestOpenAIGatewayService_GuardianParentHashCollisionPreservesParentBinding (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentHashCollisionPreservesParentBinding","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityHonorsRequiredPrivacy"}
- {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityHonorsRequiredPrivacy","Output":"=== RUN TestOpenAIGatewayService_GuardianParentAffinityHonorsRequiredPrivacy\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityHonorsRequiredPrivacy/legacy"}
- {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityHonorsRequiredPrivacy/legacy","Output":"=== RUN TestOpenAIGatewayService_GuardianParentAffinityHonorsRequiredPrivacy/legacy\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityHonorsRequiredPrivacy/legacy","Output":"--- PASS: TestOpenAIGatewayService_GuardianParentAffinityHonorsRequiredPrivacy/legacy (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityHonorsRequiredPrivacy/legacy","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityHonorsRequiredPrivacy/advanced"}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityHonorsRequiredPrivacy/advanced","Output":"=== RUN TestOpenAIGatewayService_GuardianParentAffinityHonorsRequiredPrivacy/advanced\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityHonorsRequiredPrivacy/advanced","Output":"--- PASS: TestOpenAIGatewayService_GuardianParentAffinityHonorsRequiredPrivacy/advanced (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityHonorsRequiredPrivacy/advanced","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityHonorsRequiredPrivacy","Output":"--- PASS: TestOpenAIGatewayService_GuardianParentAffinityHonorsRequiredPrivacy (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityHonorsRequiredPrivacy","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy"}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy","Output":"=== RUN TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/privacy_unset"}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/privacy_unset","Output":"=== RUN TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/privacy_unset\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/privacy_unset","Output":"--- PASS: TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/privacy_unset (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/privacy_unset","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/privacy_policy_lookup_error_fails_closed"}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/privacy_policy_lookup_error_fails_closed","Output":"=== RUN TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/privacy_policy_lookup_error_fails_closed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/privacy_policy_lookup_error_fails_closed","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:47.867Z\",\"logger\":\"slog\",\"msg\":\"profit_control_group_load_failed\",\"service\":\"sub2api\",\"env\":\"test\",\"group_id\":3904,\"error\":\"group repository unavailable\"}\n"}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/privacy_policy_lookup_error_fails_closed","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:47.867Z\",\"logger\":\"slog\",\"msg\":\"profit_control_group_load_failed\",\"service\":\"sub2api\",\"env\":\"test\",\"group_id\":3904,\"error\":\"group repository unavailable\"}\n"}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/privacy_policy_lookup_error_fails_closed","Output":"--- PASS: TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/privacy_policy_lookup_error_fails_closed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/privacy_policy_lookup_error_fails_closed","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/different_group"}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/different_group","Output":"=== RUN TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/different_group\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/different_group","Output":"--- PASS: TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/different_group (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/different_group","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy","Output":"--- PASS: TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseSimpleModeIgnoresGroupMembership"}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseSimpleModeIgnoresGroupMembership","Output":"=== RUN TestOpenAIGatewayService_PreviousResponseSimpleModeIgnoresGroupMembership\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseSimpleModeIgnoresGroupMembership","Output":"--- PASS: TestOpenAIGatewayService_PreviousResponseSimpleModeIgnoresGroupMembership (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseSimpleModeIgnoresGroupMembership","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents"}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents","Output":"=== RUN TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents/image_model"}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents/image_model","Output":"=== RUN TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents/image_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents/image_model","Output":"--- PASS: TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents/image_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents/image_model","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents/image_tool"}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents/image_tool","Output":"=== RUN TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents/image_tool\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents/image_tool","Output":"--- PASS: TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents/image_tool (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents/image_tool","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents/image_tool_choice"}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents/image_tool_choice","Output":"=== RUN TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents/image_tool_choice\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents/image_tool_choice","Output":"--- PASS: TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents/image_tool_choice (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents/image_tool_choice","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents","Output":"--- PASS: TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_DisabledGroupAllowsTextOnlyResponses"}
- {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_DisabledGroupAllowsTextOnlyResponses","Output":"=== RUN TestOpenAIGatewayServiceForward_DisabledGroupAllowsTextOnlyResponses\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_DisabledGroupAllowsTextOnlyResponses","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.867Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5151,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_DisabledGroupAllowsTextOnlyResponses","Output":"--- PASS: TestOpenAIGatewayServiceForward_DisabledGroupAllowsTextOnlyResponses (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_DisabledGroupAllowsTextOnlyResponses","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability"}
- {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability","Output":"=== RUN TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/disabled_group_skips_injection"}
- {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/disabled_group_skips_injection","Output":"=== RUN TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/disabled_group_skips_injection\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/disabled_group_skips_injection","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.867Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5151,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/disabled_group_skips_injection","Output":"--- PASS: TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/disabled_group_skips_injection (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/disabled_group_skips_injection","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_skips_injection_by_default"}
- {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_skips_injection_by_default","Output":"=== RUN TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_skips_injection_by_default\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_skips_injection_by_default","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.867Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5151,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_skips_injection_by_default","Output":"--- PASS: TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_skips_injection_by_default (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_skips_injection_by_default","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_injects_image_tool_when_bridge_enabled"}
- {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_injects_image_tool_when_bridge_enabled","Output":"=== RUN TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_injects_image_tool_when_bridge_enabled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_injects_image_tool_when_bridge_enabled","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.867Z\",\"msg\":\"[OpenAI] Injected /responses image_generation tool for Codex client\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_injects_image_tool_when_bridge_enabled","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.867Z\",\"msg\":\"[OpenAI] Set /responses image_generation tool_choice=auto for Codex client\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_injects_image_tool_when_bridge_enabled","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.867Z\",\"msg\":\"[OpenAI] /responses image_generation request inbound_model=gpt-5.4 mapped_model=gpt-5.4 account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_injects_image_tool_when_bridge_enabled","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.867Z\",\"msg\":\"[OpenAI] Added Codex image_generation bridge instructions\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_injects_image_tool_when_bridge_enabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.867Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5151,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_injects_image_tool_when_bridge_enabled","Output":"--- PASS: TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_injects_image_tool_when_bridge_enabled (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_injects_image_tool_when_bridge_enabled","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/responses_lite_skips_hosted_image_bridge"}
- {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/responses_lite_skips_hosted_image_bridge","Output":"=== RUN TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/responses_lite_skips_hosted_image_bridge\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/responses_lite_skips_hosted_image_bridge","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.867Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5151,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/responses_lite_skips_hosted_image_bridge","Output":"--- PASS: TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/responses_lite_skips_hosted_image_bridge (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/responses_lite_skips_hosted_image_bridge","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability","Output":"--- PASS: TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOpenAIPassthroughForwardsResponsesLiteHeader"}
- {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOpenAIPassthroughForwardsResponsesLiteHeader","Output":"=== RUN TestOpenAIBuildUpstreamRequestOpenAIPassthroughForwardsResponsesLiteHeader\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOpenAIPassthroughForwardsResponsesLiteHeader","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.867Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":5151,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOpenAIPassthroughForwardsResponsesLiteHeader","Output":"--- PASS: TestOpenAIBuildUpstreamRequestOpenAIPassthroughForwardsResponsesLiteHeader (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOpenAIPassthroughForwardsResponsesLiteHeader","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ExplicitImageToolWorksWithBridgeDisabled"}
- {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ExplicitImageToolWorksWithBridgeDisabled","Output":"=== RUN TestOpenAIGatewayServiceForward_ExplicitImageToolWorksWithBridgeDisabled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ExplicitImageToolWorksWithBridgeDisabled","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.867Z\",\"msg\":\"[OpenAI] Normalized /responses image_generation tool payload\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ExplicitImageToolWorksWithBridgeDisabled","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.867Z\",\"msg\":\"[OpenAI] /responses image_generation request inbound_model=gpt-5.4 mapped_model=gpt-5.4 account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ExplicitImageToolWorksWithBridgeDisabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5151,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ExplicitImageToolWorksWithBridgeDisabled","Output":"--- PASS: TestOpenAIGatewayServiceForward_ExplicitImageToolWorksWithBridgeDisabled (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ExplicitImageToolWorksWithBridgeDisabled","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsExplicitImageTool"}
- {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsExplicitImageTool","Output":"=== RUN TestOpenAIGatewayServiceForward_AccountPolicyStripsExplicitImageTool\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsExplicitImageTool","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"[OpenAI] Stripped /responses image_generation tool for Codex client by account policy\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsExplicitImageTool","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5151,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsExplicitImageTool","Output":"--- PASS: TestOpenAIGatewayServiceForward_AccountPolicyStripsExplicitImageTool (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsExplicitImageTool","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools"}
- {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools","Output":"=== RUN TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools/managed_forwarding"}
- {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools/managed_forwarding","Output":"=== RUN TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools/managed_forwarding\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools/managed_forwarding","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"[OpenAI] Stripped /responses image_generation tool for Codex client by account policy\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools/managed_forwarding","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5151,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools/managed_forwarding","Output":"--- PASS: TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools/managed_forwarding (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools/managed_forwarding","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools/passthrough_forwarding"}
- {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools/passthrough_forwarding","Output":"=== RUN TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools/passthrough_forwarding\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools/passthrough_forwarding","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"[OpenAI] Stripped /responses image_generation tool for Codex client by account policy\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools/passthrough_forwarding","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=5151 name=openai-image-controls type=apikey model=gpt-5.5 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools/passthrough_forwarding","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":5151,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools/passthrough_forwarding","Output":"--- PASS: TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools/passthrough_forwarding (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools/passthrough_forwarding","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools","Output":"--- PASS: TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ChannelBridgeOverrideEnablesCodexInjection"}
- {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ChannelBridgeOverrideEnablesCodexInjection","Output":"=== RUN TestOpenAIGatewayServiceForward_ChannelBridgeOverrideEnablesCodexInjection\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ChannelBridgeOverrideEnablesCodexInjection","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"[OpenAI] Injected /responses image_generation tool for Codex client\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ChannelBridgeOverrideEnablesCodexInjection","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"[OpenAI] Set /responses image_generation tool_choice=auto for Codex client\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ChannelBridgeOverrideEnablesCodexInjection","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"[OpenAI] /responses image_generation request inbound_model=gpt-5.4 mapped_model=gpt-5.4 account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ChannelBridgeOverrideEnablesCodexInjection","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"[OpenAI] Added Codex image_generation bridge instructions\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ChannelBridgeOverrideEnablesCodexInjection","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5151,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ChannelBridgeOverrideEnablesCodexInjection","Output":"--- PASS: TestOpenAIGatewayServiceForward_ChannelBridgeOverrideEnablesCodexInjection (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ChannelBridgeOverrideEnablesCodexInjection","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgeDoesNotInjectHostedToolAlongsideImageGenNamespace"}
- {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgeDoesNotInjectHostedToolAlongsideImageGenNamespace","Output":"=== RUN TestOpenAIGatewayServiceForward_CodexBridgeDoesNotInjectHostedToolAlongsideImageGenNamespace\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgeDoesNotInjectHostedToolAlongsideImageGenNamespace","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"[OpenAI] /responses image_generation request inbound_model=gpt-5.5 mapped_model=gpt-5.5 account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgeDoesNotInjectHostedToolAlongsideImageGenNamespace","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"[OpenAI] Added Codex image_generation bridge instructions\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgeDoesNotInjectHostedToolAlongsideImageGenNamespace","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5151,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgeDoesNotInjectHostedToolAlongsideImageGenNamespace","Output":"--- PASS: TestOpenAIGatewayServiceForward_CodexBridgeDoesNotInjectHostedToolAlongsideImageGenNamespace (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgeDoesNotInjectHostedToolAlongsideImageGenNamespace","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction"}
- {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction","Output":"=== RUN TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/flat_function"}
- {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/flat_function","Output":"=== RUN TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/flat_function\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/flat_function","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5151,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/flat_function","Output":"--- PASS: TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/flat_function (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/flat_function","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/nested_function"}
- {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/nested_function","Output":"=== RUN TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/nested_function\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/nested_function","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5151,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/nested_function","Output":"--- PASS: TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/nested_function (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/nested_function","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction","Output":"--- PASS: TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesExistingToolChoice"}
- {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesExistingToolChoice","Output":"=== RUN TestOpenAIGatewayServiceForward_CodexBridgePreservesExistingToolChoice\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesExistingToolChoice","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"[OpenAI] /responses image_generation request inbound_model=gpt-5.4 mapped_model=gpt-5.4 account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesExistingToolChoice","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"[OpenAI] Added Codex image_generation bridge instructions\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesExistingToolChoice","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5151,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesExistingToolChoice","Output":"--- PASS: TestOpenAIGatewayServiceForward_CodexBridgePreservesExistingToolChoice (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesExistingToolChoice","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgeSkipsCompactRequests"}
- {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgeSkipsCompactRequests","Output":"=== RUN TestOpenAIGatewayServiceForward_CodexBridgeSkipsCompactRequests\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgeSkipsCompactRequests","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.869Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5151,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgeSkipsCompactRequests","Output":"--- PASS: TestOpenAIGatewayServiceForward_CodexBridgeSkipsCompactRequests (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgeSkipsCompactRequests","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence","Output":"=== RUN TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/global_default_enables_bridge"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/global_default_enables_bridge","Output":"=== RUN TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/global_default_enables_bridge\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/global_default_enables_bridge","Output":"--- PASS: TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/global_default_enables_bridge (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/global_default_enables_bridge","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/channel_true_overrides_disabled_global"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/channel_true_overrides_disabled_global","Output":"=== RUN TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/channel_true_overrides_disabled_global\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/channel_true_overrides_disabled_global","Output":"--- PASS: TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/channel_true_overrides_disabled_global (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/channel_true_overrides_disabled_global","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/channel_false_overrides_enabled_global"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/channel_false_overrides_enabled_global","Output":"=== RUN TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/channel_false_overrides_enabled_global\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/channel_false_overrides_enabled_global","Output":"--- PASS: TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/channel_false_overrides_enabled_global (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/channel_false_overrides_enabled_global","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/account_false_overrides_channel_and_global_true"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/account_false_overrides_channel_and_global_true","Output":"=== RUN TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/account_false_overrides_channel_and_global_true\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/account_false_overrides_channel_and_global_true","Output":"--- PASS: TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/account_false_overrides_channel_and_global_true (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/account_false_overrides_channel_and_global_true","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/nested_account_true_overrides_channel_false"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/nested_account_true_overrides_channel_false","Output":"=== RUN TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/nested_account_true_overrides_channel_false\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/nested_account_true_overrides_channel_false","Output":"--- PASS: TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/nested_account_true_overrides_channel_false (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/nested_account_true_overrides_channel_false","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/non_openai_account_extra_is_ignored"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/non_openai_account_extra_is_ignored","Output":"=== RUN TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/non_openai_account_extra_is_ignored\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/non_openai_account_extra_is_ignored","Output":"--- PASS: TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/non_openai_account_extra_is_ignored (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/non_openai_account_extra_is_ignored","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence","Output":"--- PASS: TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceHandleResponsesImageOutputs_NonStreaming"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceHandleResponsesImageOutputs_NonStreaming","Output":"=== RUN TestOpenAIGatewayServiceHandleResponsesImageOutputs_NonStreaming\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceHandleResponsesImageOutputs_NonStreaming","Output":"--- PASS: TestOpenAIGatewayServiceHandleResponsesImageOutputs_NonStreaming (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceHandleResponsesImageOutputs_NonStreaming","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceHandleResponsesImageOutputs_Streaming"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceHandleResponsesImageOutputs_Streaming","Output":"=== RUN TestOpenAIGatewayServiceHandleResponsesImageOutputs_Streaming\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceHandleResponsesImageOutputs_Streaming","Output":"--- PASS: TestOpenAIGatewayServiceHandleResponsesImageOutputs_Streaming (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceHandleResponsesImageOutputs_Streaming","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceHandleResponsesImageOutputs_StreamingPassthrough"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceHandleResponsesImageOutputs_StreamingPassthrough","Output":"=== RUN TestOpenAIGatewayServiceHandleResponsesImageOutputs_StreamingPassthrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceHandleResponsesImageOutputs_StreamingPassthrough","Output":"--- PASS: TestOpenAIGatewayServiceHandleResponsesImageOutputs_StreamingPassthrough (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceHandleResponsesImageOutputs_StreamingPassthrough","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintCachesTrueAndFalse"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintCachesTrueAndFalse","Output":"=== RUN TestResolveOpenAIImageIntentHintCachesTrueAndFalse\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintCachesTrueAndFalse/true"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintCachesTrueAndFalse/true","Output":"=== RUN TestResolveOpenAIImageIntentHintCachesTrueAndFalse/true\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintCachesTrueAndFalse/true","Output":"--- PASS: TestResolveOpenAIImageIntentHintCachesTrueAndFalse/true (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintCachesTrueAndFalse/true","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintCachesTrueAndFalse/false_is_known"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintCachesTrueAndFalse/false_is_known","Output":"=== RUN TestResolveOpenAIImageIntentHintCachesTrueAndFalse/false_is_known\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintCachesTrueAndFalse/false_is_known","Output":"--- PASS: TestResolveOpenAIImageIntentHintCachesTrueAndFalse/false_is_known (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintCachesTrueAndFalse/false_is_known","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintCachesTrueAndFalse","Output":"--- PASS: TestResolveOpenAIImageIntentHintCachesTrueAndFalse (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintCachesTrueAndFalse","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintUsesHandlerSeed"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintUsesHandlerSeed","Output":"=== RUN TestResolveOpenAIImageIntentHintUsesHandlerSeed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintUsesHandlerSeed","Output":"--- PASS: TestResolveOpenAIImageIntentHintUsesHandlerSeed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintUsesHandlerSeed","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentReusesCanonicalAcrossFailover"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentReusesCanonicalAcrossFailover","Output":"=== RUN TestResolveOpenAIPassthroughImageIntentReusesCanonicalAcrossFailover\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentReusesCanonicalAcrossFailover","Output":"--- PASS: TestResolveOpenAIPassthroughImageIntentReusesCanonicalAcrossFailover (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentReusesCanonicalAcrossFailover","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentKeepsCompactMappingAttemptLocal"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentKeepsCompactMappingAttemptLocal","Output":"=== RUN TestResolveOpenAIPassthroughImageIntentKeepsCompactMappingAttemptLocal\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentKeepsCompactMappingAttemptLocal/text_to_image"}
- {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentKeepsCompactMappingAttemptLocal/text_to_image","Output":"=== RUN TestResolveOpenAIPassthroughImageIntentKeepsCompactMappingAttemptLocal/text_to_image\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentKeepsCompactMappingAttemptLocal/text_to_image","Output":"--- PASS: TestResolveOpenAIPassthroughImageIntentKeepsCompactMappingAttemptLocal/text_to_image (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentKeepsCompactMappingAttemptLocal/text_to_image","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentKeepsCompactMappingAttemptLocal/image_to_text"}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentKeepsCompactMappingAttemptLocal/image_to_text","Output":"=== RUN TestResolveOpenAIPassthroughImageIntentKeepsCompactMappingAttemptLocal/image_to_text\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentKeepsCompactMappingAttemptLocal/image_to_text","Output":"--- PASS: TestResolveOpenAIPassthroughImageIntentKeepsCompactMappingAttemptLocal/image_to_text (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentKeepsCompactMappingAttemptLocal/image_to_text","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentKeepsCompactMappingAttemptLocal","Output":"--- PASS: TestResolveOpenAIPassthroughImageIntentKeepsCompactMappingAttemptLocal (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentKeepsCompactMappingAttemptLocal","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentInvalidationDoesNotPolluteCanonical"}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentInvalidationDoesNotPolluteCanonical","Output":"=== RUN TestResolveOpenAIPassthroughImageIntentInvalidationDoesNotPolluteCanonical\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentInvalidationDoesNotPolluteCanonical","Output":"--- PASS: TestResolveOpenAIPassthroughImageIntentInvalidationDoesNotPolluteCanonical (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentInvalidationDoesNotPolluteCanonical","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentMappedBodyStartsUnknownThenSeedsCanonical"}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentMappedBodyStartsUnknownThenSeedsCanonical","Output":"=== RUN TestResolveOpenAIPassthroughImageIntentMappedBodyStartsUnknownThenSeedsCanonical\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentMappedBodyStartsUnknownThenSeedsCanonical","Output":"--- PASS: TestResolveOpenAIPassthroughImageIntentMappedBodyStartsUnknownThenSeedsCanonical (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentMappedBodyStartsUnknownThenSeedsCanonical","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentReusesAcrossInvariantMutations"}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentReusesAcrossInvariantMutations","Output":"=== RUN TestResolveOpenAIPassthroughImageIntentReusesAcrossInvariantMutations\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentReusesAcrossInvariantMutations/oauth_sanitize_fast_policy_and_reasoning"}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentReusesAcrossInvariantMutations/oauth_sanitize_fast_policy_and_reasoning","Output":"=== RUN TestResolveOpenAIPassthroughImageIntentReusesAcrossInvariantMutations/oauth_sanitize_fast_policy_and_reasoning\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentReusesAcrossInvariantMutations/oauth_sanitize_fast_policy_and_reasoning","Output":"--- PASS: TestResolveOpenAIPassthroughImageIntentReusesAcrossInvariantMutations/oauth_sanitize_fast_policy_and_reasoning (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentReusesAcrossInvariantMutations/oauth_sanitize_fast_policy_and_reasoning","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentReusesAcrossInvariantMutations/namespace_flatten"}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentReusesAcrossInvariantMutations/namespace_flatten","Output":"=== RUN TestResolveOpenAIPassthroughImageIntentReusesAcrossInvariantMutations/namespace_flatten\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentReusesAcrossInvariantMutations/namespace_flatten","Output":"--- PASS: TestResolveOpenAIPassthroughImageIntentReusesAcrossInvariantMutations/namespace_flatten (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentReusesAcrossInvariantMutations/namespace_flatten","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentReusesAcrossInvariantMutations","Output":"--- PASS: TestResolveOpenAIPassthroughImageIntentReusesAcrossInvariantMutations (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentReusesAcrossInvariantMutations","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal"}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal","Output":"=== RUN TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal/text_to_image_rejects"}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal/text_to_image_rejects","Output":"=== RUN TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal/text_to_image_rejects\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal/text_to_image_rejects","Output":"--- PASS: TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal/text_to_image_rejects (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal/text_to_image_rejects","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal/image_to_text_reaches_upstream"}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal/image_to_text_reaches_upstream","Output":"=== RUN TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal/image_to_text_reaches_upstream\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal/image_to_text_reaches_upstream","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.869Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=5151 name=openai-image-controls type=apikey model=gpt-image-2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal/image_to_text_reaches_upstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.869Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":5151,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal/image_to_text_reaches_upstream","Output":"--- PASS: TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal/image_to_text_reaches_upstream (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal/image_to_text_reaches_upstream","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal","Output":"--- PASS: TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintExcludesWebSocketAndUnknownTransport"}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintExcludesWebSocketAndUnknownTransport","Output":"=== RUN TestResolveOpenAIImageIntentHintExcludesWebSocketAndUnknownTransport\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintExcludesWebSocketAndUnknownTransport","Output":"--- PASS: TestResolveOpenAIImageIntentHintExcludesWebSocketAndUnknownTransport (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintExcludesWebSocketAndUnknownTransport","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintConcurrentRequestsAreIsolated"}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintConcurrentRequestsAreIsolated","Output":"=== RUN TestResolveOpenAIImageIntentHintConcurrentRequestsAreIsolated\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintConcurrentRequestsAreIsolated","Output":"--- PASS: TestResolveOpenAIImageIntentHintConcurrentRequestsAreIsolated (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintConcurrentRequestsAreIsolated","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIImageResultSize"}
- {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIImageResultSize","Output":"=== RUN TestDetectOpenAIImageResultSize\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8851681+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIImageResultSize","Output":"--- PASS: TestDetectOpenAIImageResultSize (0.02s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8851681+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIImageResultSize","Elapsed":0.02}
- {"Time":"2026-09-12T11:38:47.8851681+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthUsesDecodedOutputDimensions"}
- {"Time":"2026-09-12T11:38:47.8851681+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthUsesDecodedOutputDimensions","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_OAuthUsesDecodedOutputDimensions\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.8972309+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthUsesDecodedOutputDimensions","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.897Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 endpoint=/v1/images/generations account_type=oauth uploads=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.8972309+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthUsesDecodedOutputDimensions","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.897Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.6-luna\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.897952+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthUsesDecodedOutputDimensions","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_OAuthUsesDecodedOutputDimensions (0.01s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.897952+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthUsesDecodedOutputDimensions","Elapsed":0.01}
- {"Time":"2026-09-12T11:38:47.897952+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingUsesDecodedOutputDimensions"}
- {"Time":"2026-09-12T11:38:47.897952+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingUsesDecodedOutputDimensions","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_OAuthStreamingUsesDecodedOutputDimensions\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9095738+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingUsesDecodedOutputDimensions","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.909Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 endpoint=/v1/images/generations account_type=oauth uploads=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9095738+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingUsesDecodedOutputDimensions","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.909Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.6-luna\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingUsesDecodedOutputDimensions","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_OAuthStreamingUsesDecodedOutputDimensions (0.01s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingUsesDecodedOutputDimensions","Elapsed":0.01}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON","Output":"=== RUN TestBackfillOpenAIImagesB64JSON\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/开关关闭时原样返回"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/开关关闭时原样返回","Output":"=== RUN TestBackfillOpenAIImagesB64JSON/开关关闭时原样返回\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/开关关闭时原样返回","Output":"--- PASS: TestBackfillOpenAIImagesB64JSON/开关关闭时原样返回 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/开关关闭时原样返回","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/缺少_b64_json_且有_url_时下载回填并保留_url"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/缺少_b64_json_且有_url_时下载回填并保留_url","Output":"=== RUN TestBackfillOpenAIImagesB64JSON/缺少_b64_json_且有_url_时下载回填并保留_url\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/缺少_b64_json_且有_url_时下载回填并保留_url","Output":"--- PASS: TestBackfillOpenAIImagesB64JSON/缺少_b64_json_且有_url_时下载回填并保留_url (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/缺少_b64_json_且有_url_时下载回填并保留_url","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/b64_json_为空串时同样回填"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/b64_json_为空串时同样回填","Output":"=== RUN TestBackfillOpenAIImagesB64JSON/b64_json_为空串时同样回填\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/b64_json_为空串时同样回填","Output":"--- PASS: TestBackfillOpenAIImagesB64JSON/b64_json_为空串时同样回填 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/b64_json_为空串时同样回填","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/b64_json_已有值时不下载"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/b64_json_已有值时不下载","Output":"=== RUN TestBackfillOpenAIImagesB64JSON/b64_json_已有值时不下载\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/b64_json_已有值时不下载","Output":"--- PASS: TestBackfillOpenAIImagesB64JSON/b64_json_已有值时不下载 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/b64_json_已有值时不下载","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/多项混合时只回填缺失项"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/多项混合时只回填缺失项","Output":"=== RUN TestBackfillOpenAIImagesB64JSON/多项混合时只回填缺失项\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/多项混合时只回填缺失项","Output":"--- PASS: TestBackfillOpenAIImagesB64JSON/多项混合时只回填缺失项 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/多项混合时只回填缺失项","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/data_URL_直接取载荷不下载"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/data_URL_直接取载荷不下载","Output":"=== RUN TestBackfillOpenAIImagesB64JSON/data_URL_直接取载荷不下载\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/data_URL_直接取载荷不下载","Output":"--- PASS: TestBackfillOpenAIImagesB64JSON/data_URL_直接取载荷不下载 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/data_URL_直接取载荷不下载","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/客户端显式要求_url_时不回填"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/客户端显式要求_url_时不回填","Output":"=== RUN TestBackfillOpenAIImagesB64JSON/客户端显式要求_url_时不回填\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/客户端显式要求_url_时不回填","Output":"--- PASS: TestBackfillOpenAIImagesB64JSON/客户端显式要求_url_时不回填 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/客户端显式要求_url_时不回填","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/下载非_2xx_时保留原样"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/下载非_2xx_时保留原样","Output":"=== RUN TestBackfillOpenAIImagesB64JSON/下载非_2xx_时保留原样\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/下载非_2xx_时保留原样","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.910Z\",\"msg\":\"[OpenAI] Images b64_json backfill skipped account_id=7 index=0 err=download image: unexpected status 404\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/下载非_2xx_时保留原样","Output":"--- PASS: TestBackfillOpenAIImagesB64JSON/下载非_2xx_时保留原样 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/下载非_2xx_时保留原样","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/下载内容不是图片时保留原样"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/下载内容不是图片时保留原样","Output":"=== RUN TestBackfillOpenAIImagesB64JSON/下载内容不是图片时保留原样\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/下载内容不是图片时保留原样","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.910Z\",\"msg\":\"[OpenAI] Images b64_json backfill skipped account_id=7 index=0 err=download image: content is not an allowed image format\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/下载内容不是图片时保留原样","Output":"--- PASS: TestBackfillOpenAIImagesB64JSON/下载内容不是图片时保留原样 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/下载内容不是图片时保留原样","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/响应头未声明图片类型但字节嗅探为图片时回填"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/响应头未声明图片类型但字节嗅探为图片时回填","Output":"=== RUN TestBackfillOpenAIImagesB64JSON/响应头未声明图片类型但字节嗅探为图片时回填\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/响应头未声明图片类型但字节嗅探为图片时回填","Output":"--- PASS: TestBackfillOpenAIImagesB64JSON/响应头未声明图片类型但字节嗅探为图片时回填 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/响应头未声明图片类型但字节嗅探为图片时回填","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/响应头声明图片但字节不是图片时保留原样"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/响应头声明图片但字节不是图片时保留原样","Output":"=== RUN TestBackfillOpenAIImagesB64JSON/响应头声明图片但字节不是图片时保留原样\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/响应头声明图片但字节不是图片时保留原样","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.910Z\",\"msg\":\"[OpenAI] Images b64_json backfill skipped account_id=7 index=0 err=download image: content is not an allowed image format\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/响应头声明图片但字节不是图片时保留原样","Output":"--- PASS: TestBackfillOpenAIImagesB64JSON/响应头声明图片但字节不是图片时保留原样 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/响应头声明图片但字节不是图片时保留原样","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/非_http(s)_协议的_url_不下载"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/非_http(s)_协议的_url_不下载","Output":"=== RUN TestBackfillOpenAIImagesB64JSON/非_http(s)_协议的_url_不下载\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/非_http(s)_协议的_url_不下载","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.910Z\",\"msg\":\"[OpenAI] Images b64_json backfill skipped account_id=7 index=0 err=invalid image url: invalid url scheme: ftp\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/非_http(s)_协议的_url_不下载","Output":"--- PASS: TestBackfillOpenAIImagesB64JSON/非_http(s)_协议的_url_不下载 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/非_http(s)_协议的_url_不下载","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON","Output":"--- PASS: TestBackfillOpenAIImagesB64JSON (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_DownloadRequestShape"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_DownloadRequestShape","Output":"=== RUN TestBackfillOpenAIImagesB64JSON_DownloadRequestShape\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_DownloadRequestShape","Output":"--- PASS: TestBackfillOpenAIImagesB64JSON_DownloadRequestShape (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_DownloadRequestShape","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_RejectsPrivateHosts"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_RejectsPrivateHosts","Output":"=== RUN TestBackfillOpenAIImagesB64JSON_RejectsPrivateHosts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_RejectsPrivateHosts","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.910Z\",\"msg\":\"[OpenAI] Images b64_json backfill skipped account_id=7 index=0 err=image url host is not allowed: localhost\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_RejectsPrivateHosts","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.910Z\",\"msg\":\"[OpenAI] Images b64_json backfill skipped account_id=7 index=0 err=image url host is not allowed: Foo.LocalHost\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_RejectsPrivateHosts","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.910Z\",\"msg\":\"[OpenAI] Images b64_json backfill skipped account_id=7 index=0 err=image url host is not allowed: 127.0.0.1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_RejectsPrivateHosts","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.910Z\",\"msg\":\"[OpenAI] Images b64_json backfill skipped account_id=7 index=0 err=image url host is not allowed: 127.0.0.1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_RejectsPrivateHosts","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.910Z\",\"msg\":\"[OpenAI] Images b64_json backfill skipped account_id=7 index=0 err=image url host is not allowed: ::1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_RejectsPrivateHosts","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.910Z\",\"msg\":\"[OpenAI] Images b64_json backfill skipped account_id=7 index=0 err=image url host is not allowed: 10.0.0.5\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_RejectsPrivateHosts","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.910Z\",\"msg\":\"[OpenAI] Images b64_json backfill skipped account_id=7 index=0 err=image url host is not allowed: 172.16.0.9\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_RejectsPrivateHosts","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.910Z\",\"msg\":\"[OpenAI] Images b64_json backfill skipped account_id=7 index=0 err=image url host is not allowed: 192.168.1.10\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_RejectsPrivateHosts","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.910Z\",\"msg\":\"[OpenAI] Images b64_json backfill skipped account_id=7 index=0 err=image url host is not allowed: 169.254.169.254\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_RejectsPrivateHosts","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.910Z\",\"msg\":\"[OpenAI] Images b64_json backfill skipped account_id=7 index=0 err=image url host is not allowed: 0.0.0.0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_RejectsPrivateHosts","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.910Z\",\"msg\":\"[OpenAI] Images b64_json backfill skipped account_id=7 index=0 err=image url host is not allowed: fe80::1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_RejectsPrivateHosts","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.910Z\",\"msg\":\"[OpenAI] Images b64_json backfill skipped account_id=7 index=0 err=image url host is not allowed: ::ffff:127.0.0.1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_RejectsPrivateHosts","Output":"--- PASS: TestBackfillOpenAIImagesB64JSON_RejectsPrivateHosts (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_RejectsPrivateHosts","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_NonObjectBodies"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_NonObjectBodies","Output":"=== RUN TestBackfillOpenAIImagesB64JSON_NonObjectBodies\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_NonObjectBodies","Output":"--- PASS: TestBackfillOpenAIImagesB64JSON_NonObjectBodies (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_NonObjectBodies","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyBackfillsB64JSONFromURL"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyBackfillsB64JSONFromURL","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_APIKeyBackfillsB64JSONFromURL\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyBackfillsB64JSONFromURL","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.910Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 upstream_model=gpt-image-2 endpoint=/v1/images/generations account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyBackfillsB64JSONFromURL","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_APIKeyBackfillsB64JSONFromURL (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyBackfillsB64JSONFromURL","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyLeavesURLOnlyResponseWhenDisabled"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyLeavesURLOnlyResponseWhenDisabled","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_APIKeyLeavesURLOnlyResponseWhenDisabled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyLeavesURLOnlyResponseWhenDisabled","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.910Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 upstream_model=gpt-image-2 endpoint=/v1/images/generations account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyLeavesURLOnlyResponseWhenDisabled","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_APIKeyLeavesURLOnlyResponseWhenDisabled (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9110526+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyLeavesURLOnlyResponseWhenDisabled","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9110526+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_PreservesValidJSONResponse"}
- {"Time":"2026-09-12T11:38:47.9110526+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_PreservesValidJSONResponse","Output":"=== RUN TestOpenAIImagesJSONKeepalive_PreservesValidJSONResponse\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9163496+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_PreservesValidJSONResponse","Output":"--- PASS: TestOpenAIImagesJSONKeepalive_PreservesValidJSONResponse (0.01s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9163496+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_PreservesValidJSONResponse","Elapsed":0.01}
- {"Time":"2026-09-12T11:38:47.9163496+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_DisabledIsNoop"}
- {"Time":"2026-09-12T11:38:47.9163496+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_DisabledIsNoop","Output":"=== RUN TestOpenAIImagesJSONKeepalive_DisabledIsNoop\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9163496+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_DisabledIsNoop","Output":"--- PASS: TestOpenAIImagesJSONKeepalive_DisabledIsNoop (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9163496+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_DisabledIsNoop","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9163496+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_FastErrorPreservesStatus"}
- {"Time":"2026-09-12T11:38:47.9163496+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_FastErrorPreservesStatus","Output":"=== RUN TestOpenAIImagesJSONKeepalive_FastErrorPreservesStatus\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9163496+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_FastErrorPreservesStatus","Output":"--- PASS: TestOpenAIImagesJSONKeepalive_FastErrorPreservesStatus (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9163496+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_FastErrorPreservesStatus","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9163496+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_LateErrorRemainsJSON"}
- {"Time":"2026-09-12T11:38:47.9163496+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_LateErrorRemainsJSON","Output":"=== RUN TestOpenAIImagesJSONKeepalive_LateErrorRemainsJSON\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9230959+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_LateErrorRemainsJSON","Output":"--- PASS: TestOpenAIImagesJSONKeepalive_LateErrorRemainsJSON (0.01s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9230959+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_LateErrorRemainsJSON","Elapsed":0.01}
- {"Time":"2026-09-12T11:38:47.9230959+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_DoesNotBlockFailoverDetection"}
- {"Time":"2026-09-12T11:38:47.9230959+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_DoesNotBlockFailoverDetection","Output":"=== RUN TestOpenAIImagesJSONKeepalive_DoesNotBlockFailoverDetection\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.929425+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_DoesNotBlockFailoverDetection","Output":"--- PASS: TestOpenAIImagesJSONKeepalive_DoesNotBlockFailoverDetection (0.01s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.929425+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_DoesNotBlockFailoverDetection","Elapsed":0.01}
- {"Time":"2026-09-12T11:38:47.929425+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_KeepsOAuthNonStreamResponseValid"}
- {"Time":"2026-09-12T11:38:47.929425+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_KeepsOAuthNonStreamResponseValid","Output":"=== RUN TestOpenAIImagesJSONKeepalive_KeepsOAuthNonStreamResponseValid\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9498343+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_KeepsOAuthNonStreamResponseValid","Output":"--- PASS: TestOpenAIImagesJSONKeepalive_KeepsOAuthNonStreamResponseValid (0.02s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9498343+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_KeepsOAuthNonStreamResponseValid","Elapsed":0.02}
- {"Time":"2026-09-12T11:38:47.9498343+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepaliveWriter_NilGuards"}
- {"Time":"2026-09-12T11:38:47.9498343+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepaliveWriter_NilGuards","Output":"=== RUN TestOpenAIImagesJSONKeepaliveWriter_NilGuards\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9498343+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepaliveWriter_NilGuards","Output":"--- PASS: TestOpenAIImagesJSONKeepaliveWriter_NilGuards (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9498343+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepaliveWriter_NilGuards","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9498343+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_HeartbeatBeforeForwardStillFailsOver"}
- {"Time":"2026-09-12T11:38:47.9498343+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_HeartbeatBeforeForwardStillFailsOver","Output":"=== RUN TestOpenAIImagesJSONKeepalive_HeartbeatBeforeForwardStillFailsOver\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_HeartbeatBeforeForwardStillFailsOver","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.955Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 endpoint=/v1/images/generations account_type=oauth uploads=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_HeartbeatBeforeForwardStillFailsOver","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.955Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":22,\"final_model\":\"gpt-5.6-luna\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_HeartbeatBeforeForwardStillFailsOver","Output":"--- PASS: TestOpenAIImagesJSONKeepalive_HeartbeatBeforeForwardStillFailsOver (0.01s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_HeartbeatBeforeForwardStillFailsOver","Elapsed":0.01}
- {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_JSON"}
- {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_JSON","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_JSON\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_JSON","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_JSON (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_JSON","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_MultipartEdit"}
- {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_MultipartEdit","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_MultipartEdit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_MultipartEdit","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_MultipartEdit (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_MultipartEdit","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesRequestModerationBody_JSONEditIncludesInputImageURLs"}
- {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesRequestModerationBody_JSONEditIncludesInputImageURLs","Output":"=== RUN TestOpenAIImagesRequestModerationBody_JSONEditIncludesInputImageURLs\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesRequestModerationBody_JSONEditIncludesInputImageURLs","Output":"--- PASS: TestOpenAIImagesRequestModerationBody_JSONEditIncludesInputImageURLs (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesRequestModerationBody_JSONEditIncludesInputImageURLs","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesRequestModerationBody_MultipartEditIncludesUploadsInMemory"}
- {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesRequestModerationBody_MultipartEditIncludesUploadsInMemory","Output":"=== RUN TestOpenAIImagesRequestModerationBody_MultipartEditIncludesUploadsInMemory\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesRequestModerationBody_MultipartEditIncludesUploadsInMemory","Output":"--- PASS: TestOpenAIImagesRequestModerationBody_MultipartEditIncludesUploadsInMemory (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesRequestModerationBody_MultipartEditIncludesUploadsInMemory","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes"}
- {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1024x1024"}
- {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1024x1024","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1024x1024\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1024x1024","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1024x1024 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1024x1024","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1536x1024"}
- {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1536x1024","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1536x1024\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1536x1024","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1536x1024 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1536x1024","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1024x1536"}
- {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1024x1536","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1024x1536\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1024x1536","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1024x1536 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1024x1536","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2048x2048"}
- {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2048x2048","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2048x2048\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2048x2048","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2048x2048 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2048x2048","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2048x1152"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2048x1152","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2048x1152\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2048x1152","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2048x1152 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2048x1152","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/3840x2160"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/3840x2160","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/3840x2160\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/3840x2160","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/3840x2160 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/3840x2160","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2160x3840"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2160x3840","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2160x3840\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2160x3840","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2160x3840 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2160x3840","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1024X768"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1024X768","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1024X768\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1024X768","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1024X768 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1024X768","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1280x768"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1280x768","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1280x768\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1280x768","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1280x768 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1280x768","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2560x1440"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2560x1440","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2560x1440\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2560x1440","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2560x1440 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2560x1440","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2560x1600"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2560x1600","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2560x1600\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2560x1600","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2560x1600 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2560x1600","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/auto"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/auto","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/auto\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/auto","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/auto (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/auto","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/2048x1153"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/2048x1153","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/2048x1153\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/2048x1153","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/2048x1153 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/2048x1153","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/4096x1024"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/4096x1024","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/4096x1024\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/4096x1024","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/4096x1024 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/4096x1024","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/3840x1024"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/3840x1024","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/3840x1024\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/3840x1024","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/3840x1024 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/3840x1024","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/512x512"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/512x512","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/512x512\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/512x512","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/512x512 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/512x512","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/invalid"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/invalid","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/invalid\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/invalid","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/invalid (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/invalid","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/999999999999999999999999999x2"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/999999999999999999999999999x2","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/999999999999999999999999999x2\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/999999999999999999999999999x2","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/999999999999999999999999999x2 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/999999999999999999999999999x2","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_LegacyImageModelUnknownSizePassthrough"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_LegacyImageModelUnknownSizePassthrough","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_LegacyImageModelUnknownSizePassthrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_LegacyImageModelUnknownSizePassthrough","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_LegacyImageModelUnknownSizePassthrough (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_LegacyImageModelUnknownSizePassthrough","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_MultipartEditWithMaskAndNativeOptions"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_MultipartEditWithMaskAndNativeOptions","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_MultipartEditWithMaskAndNativeOptions\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_MultipartEditWithMaskAndNativeOptions","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_MultipartEditWithMaskAndNativeOptions (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_MultipartEditWithMaskAndNativeOptions","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_PromptOnlyDefaultsRemainBasic"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_PromptOnlyDefaultsRemainBasic","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_PromptOnlyDefaultsRemainBasic\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_PromptOnlyDefaultsRemainBasic","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_PromptOnlyDefaultsRemainBasic (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_PromptOnlyDefaultsRemainBasic","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_ExplicitSizeRequiresNativeCapability"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_ExplicitSizeRequiresNativeCapability","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_ExplicitSizeRequiresNativeCapability\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_ExplicitSizeRequiresNativeCapability","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_ExplicitSizeRequiresNativeCapability (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_ExplicitSizeRequiresNativeCapability","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_RejectsNonImageModel"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_RejectsNonImageModel","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_RejectsNonImageModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_RejectsNonImageModel","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_RejectsNonImageModel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_RejectsNonImageModel","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine-image"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine-image","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine-image\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine-image","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine-image (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine-image","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine-image-quality"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine-image-quality","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine-image-quality\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine-image-quality","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine-image-quality (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine-image-quality","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine-edit"}
- {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine-edit","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine-edit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine-edit","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine-edit (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine-edit","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_JSONEditURLs"}
- {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_JSONEditURLs","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_JSONEditURLs\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_JSONEditURLs","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_JSONEditURLs (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_JSONEditURLs","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIImagePointers_RecognizesDirectAssets"}
- {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIImagePointers_RecognizesDirectAssets","Output":"=== RUN TestCollectOpenAIImagePointers_RecognizesDirectAssets\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIImagePointers_RecognizesDirectAssets","Output":"--- PASS: TestCollectOpenAIImagePointers_RecognizesDirectAssets (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIImagePointers_RecognizesDirectAssets","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageBytes_PrefersInlineBase64"}
- {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageBytes_PrefersInlineBase64","Output":"=== RUN TestResolveOpenAIImageBytes_PrefersInlineBase64\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageBytes_PrefersInlineBase64","Output":"--- PASS: TestResolveOpenAIImageBytes_PrefersInlineBase64 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageBytes_PrefersInlineBase64","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewOpenAIImageStatusError_UsesProvidedReadLimit"}
- {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewOpenAIImageStatusError_UsesProvidedReadLimit","Output":"=== RUN TestNewOpenAIImageStatusError_UsesProvidedReadLimit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewOpenAIImageStatusError_UsesProvidedReadLimit","Output":"--- PASS: TestNewOpenAIImageStatusError_UsesProvidedReadLimit (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewOpenAIImageStatusError_UsesProvidedReadLimit","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamErrorBodyReadLimitForConfig_RespectsDiagnosticLimit"}
- {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamErrorBodyReadLimitForConfig_RespectsDiagnosticLimit","Output":"=== RUN TestOpenAIUpstreamErrorBodyReadLimitForConfig_RespectsDiagnosticLimit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamErrorBodyReadLimitForConfig_RespectsDiagnosticLimit","Output":"--- PASS: TestOpenAIUpstreamErrorBodyReadLimitForConfig_RespectsDiagnosticLimit (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamErrorBodyReadLimitForConfig_RespectsDiagnosticLimit","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIImageCapability_OAuthSupportsNative"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIImageCapability_OAuthSupportsNative","Output":"=== RUN TestAccountSupportsOpenAIImageCapability_OAuthSupportsNative\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIImageCapability_OAuthSupportsNative","Output":"--- PASS: TestAccountSupportsOpenAIImageCapability_OAuthSupportsNative (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIImageCapability_OAuthSupportsNative","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIImageCapability_SetupTokenSupportsNative"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIImageCapability_SetupTokenSupportsNative","Output":"=== RUN TestAccountSupportsOpenAIImageCapability_SetupTokenSupportsNative\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIImageCapability_SetupTokenSupportsNative","Output":"--- PASS: TestAccountSupportsOpenAIImageCapability_SetupTokenSupportsNative (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIImageCapability_SetupTokenSupportsNative","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIImageCapability_EmptyRequirementDoesNotRejectGrok"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIImageCapability_EmptyRequirementDoesNotRejectGrok","Output":"=== RUN TestAccountSupportsOpenAIImageCapability_EmptyRequirementDoesNotRejectGrok\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIImageCapability_EmptyRequirementDoesNotRejectGrok","Output":"--- PASS: TestAccountSupportsOpenAIImageCapability_EmptyRequirementDoesNotRejectGrok (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIImageCapability_EmptyRequirementDoesNotRejectGrok","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability","Output":"=== RUN TestAccountSupportsOpenAIEndpointCapability\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/OpenAI_APIKey_默认兼容_chat、embeddings_和_alpha_search"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/OpenAI_APIKey_默认兼容_chat、embeddings_和_alpha_search","Output":"=== RUN TestAccountSupportsOpenAIEndpointCapability/OpenAI_APIKey_默认兼容_chat、embeddings_和_alpha_search\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/OpenAI_APIKey_默认兼容_chat、embeddings_和_alpha_search","Output":"--- PASS: TestAccountSupportsOpenAIEndpointCapability/OpenAI_APIKey_默认兼容_chat、embeddings_和_alpha_search (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/OpenAI_APIKey_默认兼容_chat、embeddings_和_alpha_search","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/OpenAI_OAuth_默认仅兼容_chat"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/OpenAI_OAuth_默认仅兼容_chat","Output":"=== RUN TestAccountSupportsOpenAIEndpointCapability/OpenAI_OAuth_默认仅兼容_chat\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/OpenAI_OAuth_默认仅兼容_chat","Output":"--- PASS: TestAccountSupportsOpenAIEndpointCapability/OpenAI_OAuth_默认仅兼容_chat (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/OpenAI_OAuth_默认仅兼容_chat","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/alpha_search_允许_OpenAI_OAuth/PAT_与_APIKey_账号,拒绝_Grok"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/alpha_search_允许_OpenAI_OAuth/PAT_与_APIKey_账号,拒绝_Grok","Output":"=== RUN TestAccountSupportsOpenAIEndpointCapability/alpha_search_允许_OpenAI_OAuth/PAT_与_APIKey_账号,拒绝_Grok\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/alpha_search_允许_OpenAI_OAuth/PAT_与_APIKey_账号,拒绝_Grok","Output":"--- PASS: TestAccountSupportsOpenAIEndpointCapability/alpha_search_允许_OpenAI_OAuth/PAT_与_APIKey_账号,拒绝_Grok (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/alpha_search_允许_OpenAI_OAuth/PAT_与_APIKey_账号,拒绝_Grok","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/显式列表支持同时声明_chat_和_embeddings"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/显式列表支持同时声明_chat_和_embeddings","Output":"=== RUN TestAccountSupportsOpenAIEndpointCapability/显式列表支持同时声明_chat_和_embeddings\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/显式列表支持同时声明_chat_和_embeddings","Output":"--- PASS: TestAccountSupportsOpenAIEndpointCapability/显式列表支持同时声明_chat_和_embeddings (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/显式列表支持同时声明_chat_和_embeddings","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/显式列表只声明_chat_时不支持_embeddings"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/显式列表只声明_chat_时不支持_embeddings","Output":"=== RUN TestAccountSupportsOpenAIEndpointCapability/显式列表只声明_chat_时不支持_embeddings\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/显式列表只声明_chat_时不支持_embeddings","Output":"--- PASS: TestAccountSupportsOpenAIEndpointCapability/显式列表只声明_chat_时不支持_embeddings (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/显式列表只声明_chat_时不支持_embeddings","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/OAuth_显式列表沿用_chat_能力放行_alpha_search"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/OAuth_显式列表沿用_chat_能力放行_alpha_search","Output":"=== RUN TestAccountSupportsOpenAIEndpointCapability/OAuth_显式列表沿用_chat_能力放行_alpha_search\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/OAuth_显式列表沿用_chat_能力放行_alpha_search","Output":"--- PASS: TestAccountSupportsOpenAIEndpointCapability/OAuth_显式列表沿用_chat_能力放行_alpha_search (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/OAuth_显式列表沿用_chat_能力放行_alpha_search","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/显式_map_支持单独关闭_chat_并开启_embeddings"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/显式_map_支持单独关闭_chat_并开启_embeddings","Output":"=== RUN TestAccountSupportsOpenAIEndpointCapability/显式_map_支持单独关闭_chat_并开启_embeddings\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/显式_map_支持单独关闭_chat_并开启_embeddings","Output":"--- PASS: TestAccountSupportsOpenAIEndpointCapability/显式_map_支持单独关闭_chat_并开启_embeddings (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/显式_map_支持单独关闭_chat_并开启_embeddings","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/空_openai_capabilities({})与未配置一致,不排除_OAuth_文本调度"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/空_openai_capabilities({})与未配置一致,不排除_OAuth_文本调度","Output":"=== RUN TestAccountSupportsOpenAIEndpointCapability/空_openai_capabilities({})与未配置一致,不排除_OAuth_文本调度\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/空_openai_capabilities({})与未配置一致,不排除_OAuth_文本调度","Output":"--- PASS: TestAccountSupportsOpenAIEndpointCapability/空_openai_capabilities({})与未配置一致,不排除_OAuth_文本调度 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/空_openai_capabilities({})与未配置一致,不排除_OAuth_文本调度","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/空_openai_capabilities([]any)与未配置一致,不排除_OAuth_文本调度"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/空_openai_capabilities([]any)与未配置一致,不排除_OAuth_文本调度","Output":"=== RUN TestAccountSupportsOpenAIEndpointCapability/空_openai_capabilities([]any)与未配置一致,不排除_OAuth_文本调度\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/空_openai_capabilities([]any)与未配置一致,不排除_OAuth_文本调度","Output":"--- PASS: TestAccountSupportsOpenAIEndpointCapability/空_openai_capabilities([]any)与未配置一致,不排除_OAuth_文本调度 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/空_openai_capabilities([]any)与未配置一致,不排除_OAuth_文本调度","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/空_openai_capabilities([]string)与未配置一致,不排除_OAuth_文本调度"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/空_openai_capabilities([]string)与未配置一致,不排除_OAuth_文本调度","Output":"=== RUN TestAccountSupportsOpenAIEndpointCapability/空_openai_capabilities([]string)与未配置一致,不排除_OAuth_文本调度\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/空_openai_capabilities([]string)与未配置一致,不排除_OAuth_文本调度","Output":"--- PASS: TestAccountSupportsOpenAIEndpointCapability/空_openai_capabilities([]string)与未配置一致,不排除_OAuth_文本调度 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9599221+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/空_openai_capabilities([]string)与未配置一致,不排除_OAuth_文本调度","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/非空但全_false_的_map_仍按显式禁用处理,不默认放行"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/非空但全_false_的_map_仍按显式禁用处理,不默认放行","Output":"=== RUN TestAccountSupportsOpenAIEndpointCapability/非空但全_false_的_map_仍按显式禁用处理,不默认放行\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/非空但全_false_的_map_仍按显式禁用处理,不默认放行","Output":"--- PASS: TestAccountSupportsOpenAIEndpointCapability/非空但全_false_的_map_仍按显式禁用处理,不默认放行 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/非空但全_false_的_map_仍按显式禁用处理,不默认放行","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/类型异常(字符串)仍视为已配置但不含能力,不默认放行"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/类型异常(字符串)仍视为已配置但不含能力,不默认放行","Output":"=== RUN TestAccountSupportsOpenAIEndpointCapability/类型异常(字符串)仍视为已配置但不含能力,不默认放行\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/类型异常(字符串)仍视为已配置但不含能力,不默认放行","Output":"--- PASS: TestAccountSupportsOpenAIEndpointCapability/类型异常(字符串)仍视为已配置但不含能力,不默认放行 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/类型异常(字符串)仍视为已配置但不含能力,不默认放行","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/未知能力不应默认放行"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/未知能力不应默认放行","Output":"=== RUN TestAccountSupportsOpenAIEndpointCapability/未知能力不应默认放行\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/未知能力不应默认放行","Output":"--- PASS: TestAccountSupportsOpenAIEndpointCapability/未知能力不应默认放行 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/未知能力不应默认放行","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:未探测的_APIKey_默认放行"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:未探测的_APIKey_默认放行","Output":"=== RUN TestAccountSupportsOpenAIEndpointCapability/responses_能力:未探测的_APIKey_默认放行\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:未探测的_APIKey_默认放行","Output":"--- PASS: TestAccountSupportsOpenAIEndpointCapability/responses_能力:未探测的_APIKey_默认放行 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:未探测的_APIKey_默认放行","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:探测确认不支持的_APIKey_被排除"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:探测确认不支持的_APIKey_被排除","Output":"=== RUN TestAccountSupportsOpenAIEndpointCapability/responses_能力:探测确认不支持的_APIKey_被排除\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:探测确认不支持的_APIKey_被排除","Output":"--- PASS: TestAccountSupportsOpenAIEndpointCapability/responses_能力:探测确认不支持的_APIKey_被排除 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:探测确认不支持的_APIKey_被排除","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:探测确认支持的_APIKey_放行"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:探测确认支持的_APIKey_放行","Output":"=== RUN TestAccountSupportsOpenAIEndpointCapability/responses_能力:探测确认支持的_APIKey_放行\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:探测确认支持的_APIKey_放行","Output":"--- PASS: TestAccountSupportsOpenAIEndpointCapability/responses_能力:探测确认支持的_APIKey_放行 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:探测确认支持的_APIKey_放行","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:force_chat_completions_覆盖排除_APIKey"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:force_chat_completions_覆盖排除_APIKey","Output":"=== RUN TestAccountSupportsOpenAIEndpointCapability/responses_能力:force_chat_completions_覆盖排除_APIKey\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:force_chat_completions_覆盖排除_APIKey","Output":"--- PASS: TestAccountSupportsOpenAIEndpointCapability/responses_能力:force_chat_completions_覆盖排除_APIKey (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:force_chat_completions_覆盖排除_APIKey","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:OAuth_账号不受探测标记影响"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:OAuth_账号不受探测标记影响","Output":"=== RUN TestAccountSupportsOpenAIEndpointCapability/responses_能力:OAuth_账号不受探测标记影响\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:OAuth_账号不受探测标记影响","Output":"--- PASS: TestAccountSupportsOpenAIEndpointCapability/responses_能力:OAuth_账号不受探测标记影响 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:OAuth_账号不受探测标记影响","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:仍需通过_chat_completions_配置集校验"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:仍需通过_chat_completions_配置集校验","Output":"=== RUN TestAccountSupportsOpenAIEndpointCapability/responses_能力:仍需通过_chat_completions_配置集校验\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:仍需通过_chat_completions_配置集校验","Output":"--- PASS: TestAccountSupportsOpenAIEndpointCapability/responses_能力:仍需通过_chat_completions_配置集校验 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:仍需通过_chat_completions_配置集校验","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability","Output":"--- PASS: TestAccountSupportsOpenAIEndpointCapability (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesURL_HandlesVersionedBaseURL"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesURL_HandlesVersionedBaseURL","Output":"=== RUN TestBuildOpenAIImagesURL_HandlesVersionedBaseURL\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesURL_HandlesVersionedBaseURL","Output":"--- PASS: TestBuildOpenAIImagesURL_HandlesVersionedBaseURL (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesURL_HandlesVersionedBaseURL","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthPassesNAndReturnsAllImages"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthPassesNAndReturnsAllImages","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_OAuthPassesNAndReturnsAllImages\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthPassesNAndReturnsAllImages","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.956Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 endpoint=/v1/images/generations account_type=oauth uploads=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthPassesNAndReturnsAllImages","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.956Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.6-luna\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthPassesNAndReturnsAllImages","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_OAuthPassesNAndReturnsAllImages (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthPassesNAndReturnsAllImages","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback","Output":"=== RUN TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/valid_tool_usage_takes_atomic_precedence"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/valid_tool_usage_takes_atomic_precedence","Output":"=== RUN TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/valid_tool_usage_takes_atomic_precedence\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/valid_tool_usage_takes_atomic_precedence","Output":"--- PASS: TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/valid_tool_usage_takes_atomic_precedence (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/valid_tool_usage_takes_atomic_precedence","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/absent"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/absent","Output":"=== RUN TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/absent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/absent","Output":"--- PASS: TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/absent (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/absent","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/malformed_field"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/malformed_field","Output":"=== RUN TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/malformed_field\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/malformed_field","Output":"--- PASS: TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/malformed_field (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/malformed_field","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/fractional_field"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/fractional_field","Output":"=== RUN TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/fractional_field\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/fractional_field","Output":"--- PASS: TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/fractional_field (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/fractional_field","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/negative_field"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/negative_field","Output":"=== RUN TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/negative_field\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/negative_field","Output":"--- PASS: TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/negative_field (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/negative_field","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/overflow_field"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/overflow_field","Output":"=== RUN TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/overflow_field\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/overflow_field","Output":"--- PASS: TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/overflow_field (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/overflow_field","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/incomplete_object"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/incomplete_object","Output":"=== RUN TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/incomplete_object\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/incomplete_object","Output":"--- PASS: TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/incomplete_object (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/incomplete_object","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/hostile_huge_exponent"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/hostile_huge_exponent","Output":"=== RUN TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/hostile_huge_exponent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/hostile_huge_exponent","Output":"--- PASS: TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/hostile_huge_exponent (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/hostile_huge_exponent","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback","Output":"--- PASS: TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_MalformedCompletedDoesNotOverrideUsage"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_MalformedCompletedDoesNotOverrideUsage","Output":"=== RUN TestParseOpenAIImagesSSEUsageBytes_MalformedCompletedDoesNotOverrideUsage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_MalformedCompletedDoesNotOverrideUsage","Output":"--- PASS: TestParseOpenAIImagesSSEUsageBytes_MalformedCompletedDoesNotOverrideUsage (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_MalformedCompletedDoesNotOverrideUsage","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthUpstreamHTTPErrorSurfacesRealError"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthUpstreamHTTPErrorSurfacesRealError","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_OAuthUpstreamHTTPErrorSurfacesRealError\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthUpstreamHTTPErrorSurfacesRealError","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.960Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 endpoint=/v1/images/generations account_type=oauth uploads=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthUpstreamHTTPErrorSurfacesRealError","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.960Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.6-luna\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthUpstreamHTTPErrorSurfacesRealError","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_OAuthUpstreamHTTPErrorSurfacesRealError (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthUpstreamHTTPErrorSurfacesRealError","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthNonStreamModerationBlockedReturnsClientError"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthNonStreamModerationBlockedReturnsClientError","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_OAuthNonStreamModerationBlockedReturnsClientError\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthNonStreamModerationBlockedReturnsClientError","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.960Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 endpoint=/v1/images/generations account_type=oauth uploads=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthNonStreamModerationBlockedReturnsClientError","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.960Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.6-luna\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthNonStreamModerationBlockedReturnsClientError","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_OAuthNonStreamModerationBlockedReturnsClientError (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthNonStreamModerationBlockedReturnsClientError","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthNonStreamServerErrorReturnsFailoverBeforeFlush"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthNonStreamServerErrorReturnsFailoverBeforeFlush","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_OAuthNonStreamServerErrorReturnsFailoverBeforeFlush\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthNonStreamServerErrorReturnsFailoverBeforeFlush","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.960Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 endpoint=/v1/images/generations account_type=oauth uploads=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthNonStreamServerErrorReturnsFailoverBeforeFlush","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.960Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":21,\"final_model\":\"gpt-5.6-luna\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthNonStreamServerErrorReturnsFailoverBeforeFlush","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_OAuthNonStreamServerErrorReturnsFailoverBeforeFlush (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthNonStreamServerErrorReturnsFailoverBeforeFlush","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuth429CarriesSameAccountRetryWindow"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuth429CarriesSameAccountRetryWindow","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_OAuth429CarriesSameAccountRetryWindow\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuth429CarriesSameAccountRetryWindow","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.960Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 endpoint=/v1/images/generations account_type=oauth uploads=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuth429CarriesSameAccountRetryWindow","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.960Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":22,\"final_model\":\"gpt-5.6-luna\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuth429CarriesSameAccountRetryWindow","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_OAuth429CarriesSameAccountRetryWindow (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuth429CarriesSameAccountRetryWindow","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadTransportErrorFailover"}
- {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadTransportErrorFailover","Output":"=== RUN TestOpenAIImagesOAuthBodyReadTransportErrorFailover\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadTransportErrorFailover","Output":"--- PASS: TestOpenAIImagesOAuthBodyReadTransportErrorFailover (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadTransportErrorFailover","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified","Output":"=== RUN TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified/context_canceled"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified/context_canceled","Output":"=== RUN TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified/context_canceled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified/context_canceled","Output":"--- PASS: TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified/context_canceled (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified/context_canceled","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified/response_too_large"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified/response_too_large","Output":"=== RUN TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified/response_too_large\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified/response_too_large","Output":"--- PASS: TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified/response_too_large (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified/response_too_large","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified/semantic_error"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified/semantic_error","Output":"=== RUN TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified/semantic_error\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified/semantic_error","Output":"--- PASS: TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified/semantic_error (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified/semantic_error","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified","Output":"--- PASS: TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthTransportErrorAfterDownstreamWriteDoesNotFailover"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthTransportErrorAfterDownstreamWriteDoesNotFailover","Output":"=== RUN TestOpenAIImagesOAuthTransportErrorAfterDownstreamWriteDoesNotFailover\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthTransportErrorAfterDownstreamWriteDoesNotFailover","Output":"--- PASS: TestOpenAIImagesOAuthTransportErrorAfterDownstreamWriteDoesNotFailover (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthTransportErrorAfterDownstreamWriteDoesNotFailover","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings","Output":"=== RUN TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/unexpected_EOF"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/unexpected_EOF","Output":"=== RUN TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/unexpected_EOF\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/unexpected_EOF","Output":"--- PASS: TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/unexpected_EOF (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/unexpected_EOF","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/connection_reset_by_peer"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/connection_reset_by_peer","Output":"=== RUN TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/connection_reset_by_peer\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/connection_reset_by_peer","Output":"--- PASS: TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/connection_reset_by_peer (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/connection_reset_by_peer","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/broken_pipe"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/broken_pipe","Output":"=== RUN TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/broken_pipe\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/broken_pipe","Output":"--- PASS: TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/broken_pipe (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/broken_pipe","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/use_of_closed_network_connection"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/use_of_closed_network_connection","Output":"=== RUN TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/use_of_closed_network_connection\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/use_of_closed_network_connection","Output":"--- PASS: TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/use_of_closed_network_connection (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/use_of_closed_network_connection","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings","Output":"--- PASS: TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamServerErrorAfterFlushDoesNotFailover"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamServerErrorAfterFlushDoesNotFailover","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_OAuthStreamServerErrorAfterFlushDoesNotFailover\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamServerErrorAfterFlushDoesNotFailover","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.960Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 endpoint=/v1/images/generations account_type=oauth uploads=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamServerErrorAfterFlushDoesNotFailover","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.960Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":22,\"final_model\":\"gpt-5.6-luna\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamServerErrorAfterFlushDoesNotFailover","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_OAuthStreamServerErrorAfterFlushDoesNotFailover (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamServerErrorAfterFlushDoesNotFailover","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesSSEClientErrorsAreNotRetryable"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesSSEClientErrorsAreNotRetryable","Output":"=== RUN TestOpenAIImagesSSEClientErrorsAreNotRetryable\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesSSEClientErrorsAreNotRetryable/invalid_request"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesSSEClientErrorsAreNotRetryable/invalid_request","Output":"=== RUN TestOpenAIImagesSSEClientErrorsAreNotRetryable/invalid_request\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesSSEClientErrorsAreNotRetryable/invalid_request","Output":"--- PASS: TestOpenAIImagesSSEClientErrorsAreNotRetryable/invalid_request (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesSSEClientErrorsAreNotRetryable/invalid_request","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesSSEClientErrorsAreNotRetryable/content_policy"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesSSEClientErrorsAreNotRetryable/content_policy","Output":"=== RUN TestOpenAIImagesSSEClientErrorsAreNotRetryable/content_policy\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesSSEClientErrorsAreNotRetryable/content_policy","Output":"--- PASS: TestOpenAIImagesSSEClientErrorsAreNotRetryable/content_policy (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesSSEClientErrorsAreNotRetryable/content_policy","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesSSEClientErrorsAreNotRetryable/rate_limit_remains_distinct_from_server_error"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesSSEClientErrorsAreNotRetryable/rate_limit_remains_distinct_from_server_error","Output":"=== RUN TestOpenAIImagesSSEClientErrorsAreNotRetryable/rate_limit_remains_distinct_from_server_error\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesSSEClientErrorsAreNotRetryable/rate_limit_remains_distinct_from_server_error","Output":"--- PASS: TestOpenAIImagesSSEClientErrorsAreNotRetryable/rate_limit_remains_distinct_from_server_error (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesSSEClientErrorsAreNotRetryable/rate_limit_remains_distinct_from_server_error","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesSSEClientErrorsAreNotRetryable","Output":"--- PASS: TestOpenAIImagesSSEClientErrorsAreNotRetryable (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesSSEClientErrorsAreNotRetryable","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyGenerationUsesConfiguredV1BaseURL"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyGenerationUsesConfiguredV1BaseURL","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_APIKeyGenerationUsesConfiguredV1BaseURL\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyGenerationUsesConfiguredV1BaseURL","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.960Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 upstream_model=gpt-image-2 endpoint=/v1/images/generations account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyGenerationUsesConfiguredV1BaseURL","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_APIKeyGenerationUsesConfiguredV1BaseURL (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyGenerationUsesConfiguredV1BaseURL","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyAccessStateUsesTypedFailover"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyAccessStateUsesTypedFailover","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_APIKeyAccessStateUsesTypedFailover\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyAccessStateUsesTypedFailover","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.960Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-1 upstream_model=gpt-image-1 endpoint=/v1/images/generations account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyAccessStateUsesTypedFailover","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_APIKeyAccessStateUsesTypedFailover (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyAccessStateUsesTypedFailover","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamJSONResponseBillsImage"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamJSONResponseBillsImage","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_APIKeyStreamJSONResponseBillsImage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamJSONResponseBillsImage","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.960Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 upstream_model=gpt-image-2 endpoint=/v1/images/generations account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamJSONResponseBillsImage","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_APIKeyStreamJSONResponseBillsImage (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamJSONResponseBillsImage","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamRawJSONEventStreamFallbackBillsImage"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamRawJSONEventStreamFallbackBillsImage","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_APIKeyStreamRawJSONEventStreamFallbackBillsImage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamRawJSONEventStreamFallbackBillsImage","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.960Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 upstream_model=gpt-image-2 endpoint=/v1/images/generations account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamRawJSONEventStreamFallbackBillsImage","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_APIKeyStreamRawJSONEventStreamFallbackBillsImage (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamRawJSONEventStreamFallbackBillsImage","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamMultilineSSEDataBillsImage"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamMultilineSSEDataBillsImage","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_APIKeyStreamMultilineSSEDataBillsImage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamMultilineSSEDataBillsImage","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.960Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 upstream_model=gpt-image-2 endpoint=/v1/images/generations account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamMultilineSSEDataBillsImage","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_APIKeyStreamMultilineSSEDataBillsImage (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamMultilineSSEDataBillsImage","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIImagesBillableCountFromJSONBytes_CompletedEvent"}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIImagesBillableCountFromJSONBytes_CompletedEvent","Output":"=== RUN TestExtractOpenAIImagesBillableCountFromJSONBytes_CompletedEvent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIImagesBillableCountFromJSONBytes_CompletedEvent","Output":"--- PASS: TestExtractOpenAIImagesBillableCountFromJSONBytes_CompletedEvent (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIImagesBillableCountFromJSONBytes_CompletedEvent","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyEditUsesConfiguredV1BaseURL"}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyEditUsesConfiguredV1BaseURL","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_APIKeyEditUsesConfiguredV1BaseURL\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyEditUsesConfiguredV1BaseURL","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.961Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 upstream_model=gpt-image-2 endpoint=/v1/images/edits account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyEditUsesConfiguredV1BaseURL","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_APIKeyEditUsesConfiguredV1BaseURL (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyEditUsesConfiguredV1BaseURL","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingTransformsEvents"}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingTransformsEvents","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_OAuthStreamingTransformsEvents\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingTransformsEvents","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.961Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 endpoint=/v1/images/generations account_type=oauth uploads=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingTransformsEvents","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.961Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":2,\"final_model\":\"gpt-5.6-luna\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingTransformsEvents","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_OAuthStreamingTransformsEvents (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingTransformsEvents","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamingDrainsAfterClientDisconnect"}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamingDrainsAfterClientDisconnect","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_APIKeyStreamingDrainsAfterClientDisconnect\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamingDrainsAfterClientDisconnect","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.961Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 upstream_model=gpt-image-2 endpoint=/v1/images/generations account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamingDrainsAfterClientDisconnect","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.961Z\",\"msg\":\"[OpenAI] Images stream client disconnected, continue draining upstream for billing\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamingDrainsAfterClientDisconnect","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_APIKeyStreamingDrainsAfterClientDisconnect (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamingDrainsAfterClientDisconnect","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthEditsMultipartUsesResponsesAPI"}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthEditsMultipartUsesResponsesAPI","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_OAuthEditsMultipartUsesResponsesAPI\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthEditsMultipartUsesResponsesAPI","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.961Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 endpoint=/v1/images/edits account_type=oauth uploads=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthEditsMultipartUsesResponsesAPI","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.961Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":3,\"final_model\":\"gpt-5.6-luna\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthEditsMultipartUsesResponsesAPI","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_OAuthEditsMultipartUsesResponsesAPI (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthEditsMultipartUsesResponsesAPI","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthEditsStreamingTransformsEvents"}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthEditsStreamingTransformsEvents","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_OAuthEditsStreamingTransformsEvents\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthEditsStreamingTransformsEvents","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.961Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 endpoint=/v1/images/edits account_type=oauth uploads=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthEditsStreamingTransformsEvents","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.961Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":4,\"final_model\":\"gpt-5.6-luna\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthEditsStreamingTransformsEvents","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_OAuthEditsStreamingTransformsEvents (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthEditsStreamingTransformsEvents","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_PassesThroughNForMultiImageModels"}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_PassesThroughNForMultiImageModels","Output":"=== RUN TestBuildOpenAIImagesResponsesRequest_PassesThroughNForMultiImageModels\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_PassesThroughNForMultiImageModels","Output":"--- PASS: TestBuildOpenAIImagesResponsesRequest_PassesThroughNForMultiImageModels (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_PassesThroughNForMultiImageModels","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_ForcesImageToolChoice"}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_ForcesImageToolChoice","Output":"=== RUN TestBuildOpenAIImagesResponsesRequest_ForcesImageToolChoice\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_ForcesImageToolChoice","Output":"--- PASS: TestBuildOpenAIImagesResponsesRequest_ForcesImageToolChoice (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_ForcesImageToolChoice","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_DoesNotPassNForDallE3"}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_DoesNotPassNForDallE3","Output":"=== RUN TestBuildOpenAIImagesResponsesRequest_DoesNotPassNForDallE3\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_DoesNotPassNForDallE3","Output":"--- PASS: TestBuildOpenAIImagesResponsesRequest_DoesNotPassNForDallE3 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_DoesNotPassNForDallE3","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_StripsInputFidelity"}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_StripsInputFidelity","Output":"=== RUN TestBuildOpenAIImagesResponsesRequest_StripsInputFidelity\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_StripsInputFidelity","Output":"--- PASS: TestBuildOpenAIImagesResponsesRequest_StripsInputFidelity (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_StripsInputFidelity","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_RequiresVerbatimUserPrompt"}
- {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_RequiresVerbatimUserPrompt","Output":"=== RUN TestBuildOpenAIImagesResponsesRequest_RequiresVerbatimUserPrompt\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_RequiresVerbatimUserPrompt","Output":"--- PASS: TestBuildOpenAIImagesResponsesRequest_RequiresVerbatimUserPrompt (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_RequiresVerbatimUserPrompt","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIImagesFromResponsesBody_FallsBackToOutputItemDone"}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIImagesFromResponsesBody_FallsBackToOutputItemDone","Output":"=== RUN TestCollectOpenAIImagesFromResponsesBody_FallsBackToOutputItemDone\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIImagesFromResponsesBody_FallsBackToOutputItemDone","Output":"--- PASS: TestCollectOpenAIImagesFromResponsesBody_FallsBackToOutputItemDone (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIImagesFromResponsesBody_FallsBackToOutputItemDone","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIImagesFromResponsesBody_MultilineSSE"}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIImagesFromResponsesBody_MultilineSSE","Output":"=== RUN TestCollectOpenAIImagesFromResponsesBody_MultilineSSE\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIImagesFromResponsesBody_MultilineSSE","Output":"--- PASS: TestCollectOpenAIImagesFromResponsesBody_MultilineSSE (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIImagesFromResponsesBody_MultilineSSE","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingHandlesOutputItemDoneFallback"}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingHandlesOutputItemDoneFallback","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_OAuthStreamingHandlesOutputItemDoneFallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingHandlesOutputItemDoneFallback","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.962Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 endpoint=/v1/images/generations account_type=oauth uploads=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingHandlesOutputItemDoneFallback","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.962Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5,\"final_model\":\"gpt-5.6-luna\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingHandlesOutputItemDoneFallback","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_OAuthStreamingHandlesOutputItemDoneFallback (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingHandlesOutputItemDoneFallback","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingHandlesMultilineSSE"}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingHandlesMultilineSSE","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_OAuthStreamingHandlesMultilineSSE\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingHandlesMultilineSSE","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.962Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 endpoint=/v1/images/generations account_type=oauth uploads=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingHandlesMultilineSSE","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.962Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":11,\"final_model\":\"gpt-5.6-luna\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingHandlesMultilineSSE","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_OAuthStreamingHandlesMultilineSSE (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingHandlesMultilineSSE","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingDrainsAfterClientDisconnect"}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingDrainsAfterClientDisconnect","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_OAuthStreamingDrainsAfterClientDisconnect\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingDrainsAfterClientDisconnect","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.962Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 endpoint=/v1/images/generations account_type=oauth uploads=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingDrainsAfterClientDisconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.962Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":9,\"final_model\":\"gpt-5.6-luna\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingDrainsAfterClientDisconnect","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.962Z\",\"msg\":\"[OpenAI] Images stream client disconnected, continue draining upstream for billing\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingDrainsAfterClientDisconnect","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_OAuthStreamingDrainsAfterClientDisconnect (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingDrainsAfterClientDisconnect","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIImagesAPIKey_NonStreamDetachesUpstreamContext"}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIImagesAPIKey_NonStreamDetachesUpstreamContext","Output":"=== RUN TestForwardOpenAIImagesAPIKey_NonStreamDetachesUpstreamContext\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIImagesAPIKey_NonStreamDetachesUpstreamContext","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.962Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 upstream_model=gpt-image-2 endpoint=/v1/images/generations account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIImagesAPIKey_NonStreamDetachesUpstreamContext","Output":"--- PASS: TestForwardOpenAIImagesAPIKey_NonStreamDetachesUpstreamContext (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIImagesAPIKey_NonStreamDetachesUpstreamContext","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIImagesAPIKey_StreamKeepsDetachedUpstreamContext"}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIImagesAPIKey_StreamKeepsDetachedUpstreamContext","Output":"=== RUN TestForwardOpenAIImagesAPIKey_StreamKeepsDetachedUpstreamContext\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIImagesAPIKey_StreamKeepsDetachedUpstreamContext","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.962Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 upstream_model=gpt-image-2 endpoint=/v1/images/generations account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIImagesAPIKey_StreamKeepsDetachedUpstreamContext","Output":"--- PASS: TestForwardOpenAIImagesAPIKey_StreamKeepsDetachedUpstreamContext (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIImagesAPIKey_StreamKeepsDetachedUpstreamContext","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLiveCapabilityOnlyAllowsOpenAIOAuth"}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLiveCapabilityOnlyAllowsOpenAIOAuth","Output":"=== RUN TestLiveCapabilityOnlyAllowsOpenAIOAuth\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLiveCapabilityOnlyAllowsOpenAIOAuth","Output":"--- PASS: TestLiveCapabilityOnlyAllowsOpenAIOAuth (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLiveCapabilityOnlyAllowsOpenAIOAuth","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLiveCreateFailoverUsesExistingOpenAIPolicy"}
- {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLiveCreateFailoverUsesExistingOpenAIPolicy","Output":"=== RUN TestLiveCreateFailoverUsesExistingOpenAIPolicy\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLiveCreateFailoverUsesExistingOpenAIPolicy","Output":"--- PASS: TestLiveCreateFailoverUsesExistingOpenAIPolicy (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLiveCreateFailoverUsesExistingOpenAIPolicy","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIMessagesDispatchModelConfig"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIMessagesDispatchModelConfig","Output":"=== RUN TestNormalizeOpenAIMessagesDispatchModelConfig\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIMessagesDispatchModelConfig","Output":"=== PAUSE TestNormalizeOpenAIMessagesDispatchModelConfig\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIMessagesDispatchModelConfig"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeGroupMessagesDispatchFields_ClearsNonOpenAIPlatform"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeGroupMessagesDispatchFields_ClearsNonOpenAIPlatform","Output":"=== RUN TestSanitizeGroupMessagesDispatchFields_ClearsNonOpenAIPlatform\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeGroupMessagesDispatchFields_ClearsNonOpenAIPlatform","Output":"=== PAUSE TestSanitizeGroupMessagesDispatchFields_ClearsNonOpenAIPlatform\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeGroupMessagesDispatchFields_ClearsNonOpenAIPlatform"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence","Output":"=== RUN TestMode1CodexSemanticEquivalence\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/string_input"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/string_input","Output":"=== RUN TestMode1CodexSemanticEquivalence/string_input\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/string_input","Output":"--- PASS: TestMode1CodexSemanticEquivalence/string_input (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/string_input","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/text_parts"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/text_parts","Output":"=== RUN TestMode1CodexSemanticEquivalence/text_parts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/text_parts","Output":"--- PASS: TestMode1CodexSemanticEquivalence/text_parts (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/text_parts","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/reasoning_replay_metadata"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/reasoning_replay_metadata","Output":"=== RUN TestMode1CodexSemanticEquivalence/reasoning_replay_metadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/reasoning_replay_metadata","Output":"--- PASS: TestMode1CodexSemanticEquivalence/reasoning_replay_metadata (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/reasoning_replay_metadata","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/system_promotion"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/system_promotion","Output":"=== RUN TestMode1CodexSemanticEquivalence/system_promotion\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/system_promotion","Output":"--- PASS: TestMode1CodexSemanticEquivalence/system_promotion (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/system_promotion","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/tool_schema"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/tool_schema","Output":"=== RUN TestMode1CodexSemanticEquivalence/tool_schema\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/tool_schema","Output":"--- PASS: TestMode1CodexSemanticEquivalence/tool_schema (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/tool_schema","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/tool_role_result"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/tool_role_result","Output":"=== RUN TestMode1CodexSemanticEquivalence/tool_role_result\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/tool_role_result","Output":"--- PASS: TestMode1CodexSemanticEquivalence/tool_role_result (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/tool_role_result","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/call_pair"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/call_pair","Output":"=== RUN TestMode1CodexSemanticEquivalence/call_pair\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/call_pair","Output":"--- PASS: TestMode1CodexSemanticEquivalence/call_pair (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/call_pair","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/model_alias"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/model_alias","Output":"=== RUN TestMode1CodexSemanticEquivalence/model_alias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/model_alias","Output":"--- PASS: TestMode1CodexSemanticEquivalence/model_alias (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/model_alias","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/minimal_compatibility"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/minimal_compatibility","Output":"=== RUN TestMode1CodexSemanticEquivalence/minimal_compatibility\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/minimal_compatibility","Output":"--- PASS: TestMode1CodexSemanticEquivalence/minimal_compatibility (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/minimal_compatibility","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/legacy_pro_mode"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/legacy_pro_mode","Output":"=== RUN TestMode1CodexSemanticEquivalence/legacy_pro_mode\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/legacy_pro_mode","Output":"--- PASS: TestMode1CodexSemanticEquivalence/legacy_pro_mode (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/legacy_pro_mode","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/unsupported_OAuth_budget"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/unsupported_OAuth_budget","Output":"=== RUN TestMode1CodexSemanticEquivalence/unsupported_OAuth_budget\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/unsupported_OAuth_budget","Output":"--- PASS: TestMode1CodexSemanticEquivalence/unsupported_OAuth_budget (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/unsupported_OAuth_budget","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence","Output":"--- PASS: TestMode1CodexSemanticEquivalence (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_text"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_text","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/changed_text\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_text","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/changed_text (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_text","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/dropped_turn"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/dropped_turn","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/dropped_turn\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/dropped_turn","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/dropped_turn (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/dropped_turn","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_system"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_system","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/lost_system\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_system","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/lost_system (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_system","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_encrypted_reasoning"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_encrypted_reasoning","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/lost_encrypted_reasoning\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_encrypted_reasoning","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/lost_encrypted_reasoning (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_encrypted_reasoning","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_reference"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_reference","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/lost_reference\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_reference","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/lost_reference (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_reference","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/wrong_call_id"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/wrong_call_id","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/wrong_call_id\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/wrong_call_id","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/wrong_call_id (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/wrong_call_id","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_result"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_result","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/changed_result\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_result","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/changed_result (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_result","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_tools"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_tools","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/lost_tools\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_tools","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/lost_tools (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_tools","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/conflicting_legacy_tools"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/conflicting_legacy_tools","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/conflicting_legacy_tools\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/conflicting_legacy_tools","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/conflicting_legacy_tools (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/conflicting_legacy_tools","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/tool_without_association"}
- {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/tool_without_association","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/tool_without_association\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/tool_without_association","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/tool_without_association (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/tool_without_association","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_malformed_tool"}
- {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_malformed_tool","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/lost_malformed_tool\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_malformed_tool","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/lost_malformed_tool (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_malformed_tool","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lowered_reasoning"}
- {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lowered_reasoning","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/lowered_reasoning\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lowered_reasoning","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/lowered_reasoning (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lowered_reasoning","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_Astra_mode"}
- {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_Astra_mode","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/lost_Astra_mode\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_Astra_mode","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/lost_Astra_mode (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_Astra_mode","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_model"}
- {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_model","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/changed_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_model","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/changed_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_model","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_budget"}
- {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_budget","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/changed_budget\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_budget","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/changed_budget (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_budget","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_continuity"}
- {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_continuity","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/lost_continuity\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_continuity","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/lost_continuity (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_continuity","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1GuardAcceptsActualCodexTransform"}
- {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1GuardAcceptsActualCodexTransform","Output":"=== RUN TestMode1GuardAcceptsActualCodexTransform\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1GuardAcceptsActualCodexTransform","Output":"--- PASS: TestMode1GuardAcceptsActualCodexTransform (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1GuardAcceptsActualCodexTransform","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1GuardRejectsInvalidJSON"}
- {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1GuardRejectsInvalidJSON","Output":"=== RUN TestMode1GuardRejectsInvalidJSON\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1GuardRejectsInvalidJSON","Output":"--- PASS: TestMode1GuardRejectsInvalidJSON (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1GuardRejectsInvalidJSON","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3StandardWSSPoolSeparatesConversations"}
- {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3StandardWSSPoolSeparatesConversations","Output":"=== RUN TestMode1V3StandardWSSPoolSeparatesConversations\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.966662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3StandardWSSPoolSeparatesConversations","Output":"--- PASS: TestMode1V3StandardWSSPoolSeparatesConversations (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.966662+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3StandardWSSPoolSeparatesConversations","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.966662+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames"}
- {"Time":"2026-09-12T11:38:47.966662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":"=== RUN TestMode1V3WSPassthroughAcceptsCompatibilityFrames\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9671926+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.967Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=72 model=gpt-5.2 previous_response_id=- first_message_type=text first_message_bytes=118\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9671926+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.967Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_start account_id=72 ws_host=chatgpt.com ws_path=/backend-api/codex/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9671926+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.967Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":72,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:47.968717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.968Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_ok account_id=72 status_code=101 upstream_request_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.968717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.968Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=72 stage=relay_start direction=- msg_type=text bytes=118 graceful=false wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.968717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.968Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=72 stage=write_first_message_skipped direction=client_to_upstream msg_type=text bytes=118 graceful=false wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.968717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.968Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=72 stage=read_client_fail direction=client_to_upstream msg_type=- bytes=0 graceful=false wrote_downstream=false err=openai ws client close: 1008 overlapping response.create is not supported: overlapping response.create is not supported\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.968717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.968Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=72 stage=first_exit direction=client_to_upstream msg_type=- bytes=0 graceful=false wrote_downstream=false err=openai ws client close: 1008 overlapping response.create is not supported: overlapping response.create is not supported\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.968717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":" openai_mode1_v3_ws_test.go:91: \n","OutputType":"error"}
- {"Time":"2026-09-12T11:38:47.968717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":" \tError Trace:\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_mode1_v3_ws_test.go:91\n","OutputType":"error-continue"}
- {"Time":"2026-09-12T11:38:47.968717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":" \tError: \tReceived unexpected error:\n","OutputType":"error-continue"}
- {"Time":"2026-09-12T11:38:47.968717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":" \t \tfailed to get reader: received close frame: status = StatusPolicyViolation and reason = \"overlapping response.create is not supported\"\n","OutputType":"error-continue"}
- {"Time":"2026-09-12T11:38:47.968717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":" \tTest: \tTestMode1V3WSPassthroughAcceptsCompatibilityFrames\n","OutputType":"error-continue"}
- {"Time":"2026-09-12T11:38:47.968717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":"--- FAIL: TestMode1V3WSPassthroughAcceptsCompatibilityFrames (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.968717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.968Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=72 stage=read_upstream_fail direction=upstream_to_client msg_type=- bytes=0 graceful=false wrote_downstream=true err=upstream websocket closed before terminal event: context canceled\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.968717+08:00","Action":"fail","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.968717+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModelGPT6Astra"}
- {"Time":"2026-09-12T11:38:47.968717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModelGPT6Astra","Output":"=== RUN TestNormalizeKnownOpenAICodexModelGPT6Astra\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.968717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModelGPT6Astra","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.968Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=72 stage=second_exit direction=upstream_to_client msg_type=- bytes=0 graceful=false wrote_downstream=true err=upstream websocket closed before terminal event: context canceled\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.968717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModelGPT6Astra","Output":"--- PASS: TestNormalizeKnownOpenAICodexModelGPT6Astra (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModelGPT6Astra","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.968Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=72 stage=relay_exit direction=client_to_upstream msg_type=- bytes=0 graceful=false wrote_downstream=true err=openai ws client close: 1008 overlapping response.create is not supported: overlapping response.create is not supported\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModelGPT6Astra","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol","Output":"=== RUN TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6","Output":"=== RUN TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6","Output":"--- PASS: TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/openai/gpt-5.6"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/openai/gpt-5.6","Output":"=== RUN TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/openai/gpt-5.6\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/openai/gpt-5.6","Output":"--- PASS: TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/openai/gpt-5.6 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/openai/gpt-5.6","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt5.6"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt5.6","Output":"=== RUN TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt5.6\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt5.6","Output":"--- PASS: TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt5.6 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt5.6","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-high"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-high","Output":"=== RUN TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-high\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-high","Output":"--- PASS: TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-high (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-high","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-max"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-max","Output":"=== RUN TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-max\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-max","Output":"--- PASS: TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-max (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-max","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-2026-07-09"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-2026-07-09","Output":"=== RUN TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-2026-07-09\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-2026-07-09","Output":"--- PASS: TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-2026-07-09 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-2026-07-09","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/openai/gpt-5.6-max"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/openai/gpt-5.6-max","Output":"=== RUN TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/openai/gpt-5.6-max\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/openai/gpt-5.6-max","Output":"--- PASS: TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/openai/gpt-5.6-max (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/openai/gpt-5.6-max","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol","Output":"--- PASS: TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel","Output":"=== RUN TestResolveOpenAIForwardModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/uses_messages_dispatch_model_for_known_claude_family"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/uses_messages_dispatch_model_for_known_claude_family","Output":"=== RUN TestResolveOpenAIForwardModel/uses_messages_dispatch_model_for_known_claude_family\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/uses_messages_dispatch_model_for_known_claude_family","Output":"--- PASS: TestResolveOpenAIForwardModel/uses_messages_dispatch_model_for_known_claude_family (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/uses_messages_dispatch_model_for_known_claude_family","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/uses_exact_messages_dispatch_model_for_unknown_claude_family"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/uses_exact_messages_dispatch_model_for_unknown_claude_family","Output":"=== RUN TestResolveOpenAIForwardModel/uses_exact_messages_dispatch_model_for_unknown_claude_family\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/uses_exact_messages_dispatch_model_for_unknown_claude_family","Output":"--- PASS: TestResolveOpenAIForwardModel/uses_exact_messages_dispatch_model_for_unknown_claude_family (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/uses_exact_messages_dispatch_model_for_unknown_claude_family","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/nil_account_uses_messages_dispatch_model"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/nil_account_uses_messages_dispatch_model","Output":"=== RUN TestResolveOpenAIForwardModel/nil_account_uses_messages_dispatch_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/nil_account_uses_messages_dispatch_model","Output":"--- PASS: TestResolveOpenAIForwardModel/nil_account_uses_messages_dispatch_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/nil_account_uses_messages_dispatch_model","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/nil_account_without_messages_dispatch_keeps_requested_model"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/nil_account_without_messages_dispatch_keeps_requested_model","Output":"=== RUN TestResolveOpenAIForwardModel/nil_account_without_messages_dispatch_keeps_requested_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/nil_account_without_messages_dispatch_keeps_requested_model","Output":"--- PASS: TestResolveOpenAIForwardModel/nil_account_without_messages_dispatch_keeps_requested_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/nil_account_without_messages_dispatch_keeps_requested_model","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_unknown_gpt_model_has_no_messages_dispatch_fallback"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_unknown_gpt_model_has_no_messages_dispatch_fallback","Output":"=== RUN TestResolveOpenAIForwardModel/ordinary_unknown_gpt_model_has_no_messages_dispatch_fallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_unknown_gpt_model_has_no_messages_dispatch_fallback","Output":"--- PASS: TestResolveOpenAIForwardModel/ordinary_unknown_gpt_model_has_no_messages_dispatch_fallback (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_unknown_gpt_model_has_no_messages_dispatch_fallback","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/account_exact_mapping_overrides_messages_dispatch_model"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/account_exact_mapping_overrides_messages_dispatch_model","Output":"=== RUN TestResolveOpenAIForwardModel/account_exact_mapping_overrides_messages_dispatch_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/account_exact_mapping_overrides_messages_dispatch_model","Output":"--- PASS: TestResolveOpenAIForwardModel/account_exact_mapping_overrides_messages_dispatch_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/account_exact_mapping_overrides_messages_dispatch_model","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/account_wildcard_mapping_overrides_messages_dispatch_model"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/account_wildcard_mapping_overrides_messages_dispatch_model","Output":"=== RUN TestResolveOpenAIForwardModel/account_wildcard_mapping_overrides_messages_dispatch_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/account_wildcard_mapping_overrides_messages_dispatch_model","Output":"--- PASS: TestResolveOpenAIForwardModel/account_wildcard_mapping_overrides_messages_dispatch_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/account_wildcard_mapping_overrides_messages_dispatch_model","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/account_passthrough_mapping_overrides_messages_dispatch_model"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/account_passthrough_mapping_overrides_messages_dispatch_model","Output":"=== RUN TestResolveOpenAIForwardModel/account_passthrough_mapping_overrides_messages_dispatch_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/account_passthrough_mapping_overrides_messages_dispatch_model","Output":"--- PASS: TestResolveOpenAIForwardModel/account_passthrough_mapping_overrides_messages_dispatch_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/account_passthrough_mapping_overrides_messages_dispatch_model","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_codex_spark_request_keeps_requested_model"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_codex_spark_request_keeps_requested_model","Output":"=== RUN TestResolveOpenAIForwardModel/ordinary_codex_spark_request_keeps_requested_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_codex_spark_request_keeps_requested_model","Output":"--- PASS: TestResolveOpenAIForwardModel/ordinary_codex_spark_request_keeps_requested_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_codex_spark_request_keeps_requested_model","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_gpt-5.5_request_keeps_requested_model"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_gpt-5.5_request_keeps_requested_model","Output":"=== RUN TestResolveOpenAIForwardModel/ordinary_gpt-5.5_request_keeps_requested_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_gpt-5.5_request_keeps_requested_model","Output":"--- PASS: TestResolveOpenAIForwardModel/ordinary_gpt-5.5_request_keeps_requested_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_gpt-5.5_request_keeps_requested_model","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_gpt-5.5-pro_request_keeps_requested_model"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_gpt-5.5-pro_request_keeps_requested_model","Output":"=== RUN TestResolveOpenAIForwardModel/ordinary_gpt-5.5-pro_request_keeps_requested_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_gpt-5.5-pro_request_keeps_requested_model","Output":"--- PASS: TestResolveOpenAIForwardModel/ordinary_gpt-5.5-pro_request_keeps_requested_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_gpt-5.5-pro_request_keeps_requested_model","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_compact-spelled_gpt5.5_request_keeps_requested_model"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_compact-spelled_gpt5.5_request_keeps_requested_model","Output":"=== RUN TestResolveOpenAIForwardModel/ordinary_compact-spelled_gpt5.5_request_keeps_requested_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_compact-spelled_gpt5.5_request_keeps_requested_model","Output":"--- PASS: TestResolveOpenAIForwardModel/ordinary_compact-spelled_gpt5.5_request_keeps_requested_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_compact-spelled_gpt5.5_request_keeps_requested_model","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_namespaced_gpt-5.5_request_keeps_requested_model"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_namespaced_gpt-5.5_request_keeps_requested_model","Output":"=== RUN TestResolveOpenAIForwardModel/ordinary_namespaced_gpt-5.5_request_keeps_requested_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_namespaced_gpt-5.5_request_keeps_requested_model","Output":"--- PASS: TestResolveOpenAIForwardModel/ordinary_namespaced_gpt-5.5_request_keeps_requested_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_namespaced_gpt-5.5_request_keeps_requested_model","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_compact_gpt-5.5_request_keeps_requested_model"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_compact_gpt-5.5_request_keeps_requested_model","Output":"=== RUN TestResolveOpenAIForwardModel/ordinary_compact_gpt-5.5_request_keeps_requested_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_compact_gpt-5.5_request_keeps_requested_model","Output":"--- PASS: TestResolveOpenAIForwardModel/ordinary_compact_gpt-5.5_request_keeps_requested_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_compact_gpt-5.5_request_keeps_requested_model","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/whitespace-only_messages_dispatch_model_is_ignored"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/whitespace-only_messages_dispatch_model_is_ignored","Output":"=== RUN TestResolveOpenAIForwardModel/whitespace-only_messages_dispatch_model_is_ignored\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/whitespace-only_messages_dispatch_model_is_ignored","Output":"--- PASS: TestResolveOpenAIForwardModel/whitespace-only_messages_dispatch_model_is_ignored (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/whitespace-only_messages_dispatch_model_is_ignored","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel","Output":"--- PASS: TestResolveOpenAIForwardModel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel","Output":"=== RUN TestResolveOpenAICompactForwardModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel/nil_account_keeps_original_model"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel/nil_account_keeps_original_model","Output":"=== RUN TestResolveOpenAICompactForwardModel/nil_account_keeps_original_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel/nil_account_keeps_original_model","Output":"--- PASS: TestResolveOpenAICompactForwardModel/nil_account_keeps_original_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel/nil_account_keeps_original_model","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel/missing_compact_mapping_keeps_original_model"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel/missing_compact_mapping_keeps_original_model","Output":"=== RUN TestResolveOpenAICompactForwardModel/missing_compact_mapping_keeps_original_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel/missing_compact_mapping_keeps_original_model","Output":"--- PASS: TestResolveOpenAICompactForwardModel/missing_compact_mapping_keeps_original_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel/missing_compact_mapping_keeps_original_model","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel/exact_compact_mapping_overrides_model"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel/exact_compact_mapping_overrides_model","Output":"=== RUN TestResolveOpenAICompactForwardModel/exact_compact_mapping_overrides_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel/exact_compact_mapping_overrides_model","Output":"--- PASS: TestResolveOpenAICompactForwardModel/exact_compact_mapping_overrides_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel/exact_compact_mapping_overrides_model","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel/wildcard_compact_mapping_overrides_model"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel/wildcard_compact_mapping_overrides_model","Output":"=== RUN TestResolveOpenAICompactForwardModel/wildcard_compact_mapping_overrides_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel/wildcard_compact_mapping_overrides_model","Output":"--- PASS: TestResolveOpenAICompactForwardModel/wildcard_compact_mapping_overrides_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel/wildcard_compact_mapping_overrides_model","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel/passthrough_compact_mapping_remains_unchanged"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel/passthrough_compact_mapping_remains_unchanged","Output":"=== RUN TestResolveOpenAICompactForwardModel/passthrough_compact_mapping_remains_unchanged\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel/passthrough_compact_mapping_remains_unchanged","Output":"--- PASS: TestResolveOpenAICompactForwardModel/passthrough_compact_mapping_remains_unchanged (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel/passthrough_compact_mapping_remains_unchanged","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel","Output":"--- PASS: TestResolveOpenAICompactForwardModel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence","Output":"=== RUN TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/compact_uses_client-visible_model_before_ordinary_mapping"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/compact_uses_client-visible_model_before_ordinary_mapping","Output":"=== RUN TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/compact_uses_client-visible_model_before_ordinary_mapping\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/compact_uses_client-visible_model_before_ordinary_mapping","Output":"--- PASS: TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/compact_uses_client-visible_model_before_ordinary_mapping (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/compact_uses_client-visible_model_before_ordinary_mapping","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/non-compact_uses_ordinary_mapping"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/non-compact_uses_ordinary_mapping","Output":"=== RUN TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/non-compact_uses_ordinary_mapping\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/non-compact_uses_ordinary_mapping","Output":"--- PASS: TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/non-compact_uses_ordinary_mapping (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/non-compact_uses_ordinary_mapping","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/compact_falls_back_to_ordinary_mapped_model"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/compact_falls_back_to_ordinary_mapped_model","Output":"=== RUN TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/compact_falls_back_to_ordinary_mapped_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/compact_falls_back_to_ordinary_mapped_model","Output":"--- PASS: TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/compact_falls_back_to_ordinary_mapped_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/compact_falls_back_to_ordinary_mapped_model","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/passthrough_ignores_ordinary_mapping"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/passthrough_ignores_ordinary_mapping","Output":"=== RUN TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/passthrough_ignores_ordinary_mapping\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/passthrough_ignores_ordinary_mapping","Output":"--- PASS: TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/passthrough_ignores_ordinary_mapping (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/passthrough_ignores_ordinary_mapping","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/raw_chat_fallback_never_applies_compact_mapping"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/raw_chat_fallback_never_applies_compact_mapping","Output":"=== RUN TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/raw_chat_fallback_never_applies_compact_mapping\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/raw_chat_fallback_never_applies_compact_mapping","Output":"--- PASS: TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/raw_chat_fallback_never_applies_compact_mapping (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/raw_chat_fallback_never_applies_compact_mapping","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence","Output":"--- PASS: TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics","Output":"=== RUN TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics/OpenAI_OAuth_applies_Codex_alias_normalization"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics/OpenAI_OAuth_applies_Codex_alias_normalization","Output":"=== RUN TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics/OpenAI_OAuth_applies_Codex_alias_normalization\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics/OpenAI_OAuth_applies_Codex_alias_normalization","Output":"--- PASS: TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics/OpenAI_OAuth_applies_Codex_alias_normalization (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics/OpenAI_OAuth_applies_Codex_alias_normalization","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics/OpenAI_passthrough_ignores_ordinary_account_mapping"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics/OpenAI_passthrough_ignores_ordinary_account_mapping","Output":"=== RUN TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics/OpenAI_passthrough_ignores_ordinary_account_mapping\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics/OpenAI_passthrough_ignores_ordinary_account_mapping","Output":"--- PASS: TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics/OpenAI_passthrough_ignores_ordinary_account_mapping (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics/OpenAI_passthrough_ignores_ordinary_account_mapping","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics/Grok_OAuth_does_not_inherit_OpenAI_Codex_aliases"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics/Grok_OAuth_does_not_inherit_OpenAI_Codex_aliases","Output":"=== RUN TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics/Grok_OAuth_does_not_inherit_OpenAI_Codex_aliases\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics/Grok_OAuth_does_not_inherit_OpenAI_Codex_aliases","Output":"--- PASS: TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics/Grok_OAuth_does_not_inherit_OpenAI_Codex_aliases (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics/Grok_OAuth_does_not_inherit_OpenAI_Codex_aliases","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics","Output":"--- PASS: TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIErrorSchedulingModelPrefersActualUpstreamModel"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIErrorSchedulingModelPrefersActualUpstreamModel","Output":"=== RUN TestResolveOpenAIErrorSchedulingModelPrefersActualUpstreamModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIErrorSchedulingModelPrefersActualUpstreamModel","Output":"--- PASS: TestResolveOpenAIErrorSchedulingModelPrefersActualUpstreamModel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIErrorSchedulingModelPrefersActualUpstreamModel","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel","Output":"=== RUN TestNormalizeCodexModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel","Output":"--- PASS: TestNormalizeCodexModel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream","Output":"=== RUN TestNormalizeOpenAIModelForUpstream\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_routes_bare_GPT-5.6_alias_to_Sol"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_routes_bare_GPT-5.6_alias_to_Sol","Output":"=== RUN TestNormalizeOpenAIModelForUpstream/oauth_routes_bare_GPT-5.6_alias_to_Sol\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_routes_bare_GPT-5.6_alias_to_Sol","Output":"--- PASS: TestNormalizeOpenAIModelForUpstream/oauth_routes_bare_GPT-5.6_alias_to_Sol (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_routes_bare_GPT-5.6_alias_to_Sol","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_routes_provider-prefixed_GPT-5.6_alias_to_Sol"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_routes_provider-prefixed_GPT-5.6_alias_to_Sol","Output":"=== RUN TestNormalizeOpenAIModelForUpstream/oauth_routes_provider-prefixed_GPT-5.6_alias_to_Sol\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_routes_provider-prefixed_GPT-5.6_alias_to_Sol","Output":"--- PASS: TestNormalizeOpenAIModelForUpstream/oauth_routes_provider-prefixed_GPT-5.6_alias_to_Sol (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_routes_provider-prefixed_GPT-5.6_alias_to_Sol","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_preserves_unknown_non_codex_model"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_preserves_unknown_non_codex_model","Output":"=== RUN TestNormalizeOpenAIModelForUpstream/oauth_preserves_unknown_non_codex_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_preserves_unknown_non_codex_model","Output":"--- PASS: TestNormalizeOpenAIModelForUpstream/oauth_preserves_unknown_non_codex_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_preserves_unknown_non_codex_model","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_preserves_invalid_gpt_model"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_preserves_invalid_gpt_model","Output":"=== RUN TestNormalizeOpenAIModelForUpstream/oauth_preserves_invalid_gpt_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_preserves_invalid_gpt_model","Output":"--- PASS: TestNormalizeOpenAIModelForUpstream/oauth_preserves_invalid_gpt_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_preserves_invalid_gpt_model","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_normalizes_known_codex_alias"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_normalizes_known_codex_alias","Output":"=== RUN TestNormalizeOpenAIModelForUpstream/oauth_normalizes_known_codex_alias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_normalizes_known_codex_alias","Output":"--- PASS: TestNormalizeOpenAIModelForUpstream/oauth_normalizes_known_codex_alias (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_normalizes_known_codex_alias","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_preserves_GPT-5.5_Pro_model"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_preserves_GPT-5.5_Pro_model","Output":"=== RUN TestNormalizeOpenAIModelForUpstream/oauth_preserves_GPT-5.5_Pro_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_preserves_GPT-5.5_Pro_model","Output":"--- PASS: TestNormalizeOpenAIModelForUpstream/oauth_preserves_GPT-5.5_Pro_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_preserves_GPT-5.5_Pro_model","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_preserves_codex_auto_review_model"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_preserves_codex_auto_review_model","Output":"=== RUN TestNormalizeOpenAIModelForUpstream/oauth_preserves_codex_auto_review_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_preserves_codex_auto_review_model","Output":"--- PASS: TestNormalizeOpenAIModelForUpstream/oauth_preserves_codex_auto_review_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_preserves_codex_auto_review_model","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/apikey_preserves_official_bare_GPT-5.6_alias"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/apikey_preserves_official_bare_GPT-5.6_alias","Output":"=== RUN TestNormalizeOpenAIModelForUpstream/apikey_preserves_official_bare_GPT-5.6_alias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/apikey_preserves_official_bare_GPT-5.6_alias","Output":"--- PASS: TestNormalizeOpenAIModelForUpstream/apikey_preserves_official_bare_GPT-5.6_alias (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/apikey_preserves_official_bare_GPT-5.6_alias","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/apikey_preserves_custom_compatible_model"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/apikey_preserves_custom_compatible_model","Output":"=== RUN TestNormalizeOpenAIModelForUpstream/apikey_preserves_custom_compatible_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/apikey_preserves_custom_compatible_model","Output":"--- PASS: TestNormalizeOpenAIModelForUpstream/apikey_preserves_custom_compatible_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/apikey_preserves_custom_compatible_model","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/apikey_preserves_official_non_codex_model"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/apikey_preserves_official_non_codex_model","Output":"=== RUN TestNormalizeOpenAIModelForUpstream/apikey_preserves_official_non_codex_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/apikey_preserves_official_non_codex_model","Output":"--- PASS: TestNormalizeOpenAIModelForUpstream/apikey_preserves_official_non_codex_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/apikey_preserves_official_non_codex_model","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream","Output":"--- PASS: TestNormalizeOpenAIModelForUpstream (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUsageBillingModelCandidatesPreserveCodexAutoReviewModel"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUsageBillingModelCandidatesPreserveCodexAutoReviewModel","Output":"=== RUN TestUsageBillingModelCandidatesPreserveCodexAutoReviewModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUsageBillingModelCandidatesPreserveCodexAutoReviewModel","Output":"--- PASS: TestUsageBillingModelCandidatesPreserveCodexAutoReviewModel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUsageBillingModelCandidatesPreserveCodexAutoReviewModel","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListUsesStandardRequestAndIsolatesCodexCache"}
- {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListUsesStandardRequestAndIsolatesCodexCache","Output":"=== RUN TestFetchOpenAIModelsListUsesStandardRequestAndIsolatesCodexCache\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969734+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListUsesStandardRequestAndIsolatesCodexCache","Output":"--- PASS: TestFetchOpenAIModelsListUsesStandardRequestAndIsolatesCodexCache (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.969734+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListUsesStandardRequestAndIsolatesCodexCache","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.969734+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListOAuthSharesManifestCache"}
- {"Time":"2026-09-12T11:38:47.969734+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListOAuthSharesManifestCache","Output":"=== RUN TestFetchOpenAIModelsListOAuthSharesManifestCache\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.970239+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListOAuthSharesManifestCache","Output":"--- PASS: TestFetchOpenAIModelsListOAuthSharesManifestCache (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.970239+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListOAuthSharesManifestCache","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.970239+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListCacheWindowsAndSingleflight"}
- {"Time":"2026-09-12T11:38:47.970239+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListCacheWindowsAndSingleflight","Output":"=== RUN TestFetchOpenAIModelsListCacheWindowsAndSingleflight\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9917776+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListCacheWindowsAndSingleflight","Output":"--- PASS: TestFetchOpenAIModelsListCacheWindowsAndSingleflight (0.02s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9917776+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListCacheWindowsAndSingleflight","Elapsed":0.02}
- {"Time":"2026-09-12T11:38:47.9917776+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListRevalidatesUpstreamETag"}
- {"Time":"2026-09-12T11:38:47.9917776+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListRevalidatesUpstreamETag","Output":"=== RUN TestFetchOpenAIModelsListRevalidatesUpstreamETag\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListRevalidatesUpstreamETag","Output":"--- PASS: TestFetchOpenAIModelsListRevalidatesUpstreamETag (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListRevalidatesUpstreamETag","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses"}
- {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses","Output":"=== RUN TestFetchOpenAIModelsListEmptyAndMalformedResponses\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[]}"}
- {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[]}","Output":"=== RUN TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[]}\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[]}","Output":"--- PASS: TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[]} (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[]}","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":null}"}
- {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":null}","Output":"=== RUN TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":null}\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":null}","Output":"--- PASS: TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":null} (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":null}","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{}"}
- {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{}","Output":"=== RUN TestFetchOpenAIModelsListEmptyAndMalformedResponses/{}\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{}","Output":"--- PASS: TestFetchOpenAIModelsListEmptyAndMalformedResponses/{} (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{}","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":{}}"}
- {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":{}}","Output":"=== RUN TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":{}}\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":{}}","Output":"--- PASS: TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":{}} (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":{}}","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[{}]}"}
- {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[{}]}","Output":"=== RUN TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[{}]}\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[{}]}","Output":"--- PASS: TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[{}]} (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[{}]}","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[null]}"}
- {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[null]}","Output":"=== RUN TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[null]}\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[null]}","Output":"--- PASS: TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[null]} (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[null]}","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses","Output":"--- PASS: TestFetchOpenAIModelsListEmptyAndMalformedResponses (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPinnedOpenAIModelsListMixedAccountsShareColdCacheAcrossGroups"}
- {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPinnedOpenAIModelsListMixedAccountsShareColdCacheAcrossGroups","Output":"=== RUN TestPinnedOpenAIModelsListMixedAccountsShareColdCacheAcrossGroups\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9940276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPinnedOpenAIModelsListMixedAccountsShareColdCacheAcrossGroups","Output":"--- PASS: TestPinnedOpenAIModelsListMixedAccountsShareColdCacheAcrossGroups (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9940276+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPinnedOpenAIModelsListMixedAccountsShareColdCacheAcrossGroups","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9940276+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListResolvesShadowOAuthCredentials"}
- {"Time":"2026-09-12T11:38:47.9940276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListResolvesShadowOAuthCredentials","Output":"=== RUN TestFetchOpenAIModelsListResolvesShadowOAuthCredentials\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9945382+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListResolvesShadowOAuthCredentials","Output":"--- PASS: TestFetchOpenAIModelsListResolvesShadowOAuthCredentials (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9945382+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListResolvesShadowOAuthCredentials","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9945382+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProjectAccountModelsCannotExposeCodexMediaThroughAlias"}
- {"Time":"2026-09-12T11:38:47.9945382+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProjectAccountModelsCannotExposeCodexMediaThroughAlias","Output":"=== RUN TestProjectAccountModelsCannotExposeCodexMediaThroughAlias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9945382+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProjectAccountModelsCannotExposeCodexMediaThroughAlias","Output":"--- PASS: TestProjectAccountModelsCannotExposeCodexMediaThroughAlias (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9945382+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProjectAccountModelsCannotExposeCodexMediaThroughAlias","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9945382+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListRejectsUnexpectedCold304"}
- {"Time":"2026-09-12T11:38:47.9945382+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListRejectsUnexpectedCold304","Output":"=== RUN TestFetchOpenAIModelsListRejectsUnexpectedCold304\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9945382+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListRejectsUnexpectedCold304","Output":"--- PASS: TestFetchOpenAIModelsListRejectsUnexpectedCold304 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9945382+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListRejectsUnexpectedCold304","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9945382+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelsCacheSeparatesRepresentationsForIdenticalRequests"}
- {"Time":"2026-09-12T11:38:47.9945382+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelsCacheSeparatesRepresentationsForIdenticalRequests","Output":"=== RUN TestOpenAIModelsCacheSeparatesRepresentationsForIdenticalRequests\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9945382+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelsCacheSeparatesRepresentationsForIdenticalRequests","Output":"--- PASS: TestOpenAIModelsCacheSeparatesRepresentationsForIdenticalRequests (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9945382+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelsCacheSeparatesRepresentationsForIdenticalRequests","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9945382+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ResponsesUnknownModelDoesNotFallbackToGPT54"}
- {"Time":"2026-09-12T11:38:47.9945382+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ResponsesUnknownModelDoesNotFallbackToGPT54","Output":"=== RUN TestOpenAIGatewayService_ResponsesUnknownModelDoesNotFallbackToGPT54\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9950426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ResponsesUnknownModelDoesNotFallbackToGPT54","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.994Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":123,\"final_model\":\"gpt6\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.9950426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ResponsesUnknownModelDoesNotFallbackToGPT54","Output":"--- PASS: TestOpenAIGatewayService_ResponsesUnknownModelDoesNotFallbackToGPT54 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9950426+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ResponsesUnknownModelDoesNotFallbackToGPT54","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9950426+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthResponsesPromotesSystemMessageWithoutDuplication"}
- {"Time":"2026-09-12T11:38:47.9950426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthResponsesPromotesSystemMessageWithoutDuplication","Output":"=== RUN TestOpenAIGatewayService_OAuthResponsesPromotesSystemMessageWithoutDuplication\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9950426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthResponsesPromotesSystemMessageWithoutDuplication","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.995Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":124,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.9950426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthResponsesPromotesSystemMessageWithoutDuplication","Output":"--- PASS: TestOpenAIGatewayService_OAuthResponsesPromotesSystemMessageWithoutDuplication (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9950426+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthResponsesPromotesSystemMessageWithoutDuplication","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9950426+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeResponsesBodyModificationPreservesHTMLChars"}
- {"Time":"2026-09-12T11:38:47.9950426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeResponsesBodyModificationPreservesHTMLChars","Output":"=== RUN TestOpenAIGatewayService_NativeResponsesBodyModificationPreservesHTMLChars\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9950426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeResponsesBodyModificationPreservesHTMLChars","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.995Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":456,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.9950426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeResponsesBodyModificationPreservesHTMLChars","Output":"--- PASS: TestOpenAIGatewayService_NativeResponsesBodyModificationPreservesHTMLChars (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9950426+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeResponsesBodyModificationPreservesHTMLChars","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9950426+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthMessagesBridgeDoesNotInjectDefaultInstructions"}
- {"Time":"2026-09-12T11:38:47.9950426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthMessagesBridgeDoesNotInjectDefaultInstructions","Output":"=== RUN TestOpenAIGatewayService_OAuthMessagesBridgeDoesNotInjectDefaultInstructions\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9950426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthMessagesBridgeDoesNotInjectDefaultInstructions","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.995Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":123,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthMessagesBridgeDoesNotInjectDefaultInstructions","Output":"--- PASS: TestOpenAIGatewayService_OAuthMessagesBridgeDoesNotInjectDefaultInstructions (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthMessagesBridgeDoesNotInjectDefaultInstructions","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamKeepsToolNameAndBodyNormalized"}
- {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamKeepsToolNameAndBodyNormalized","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_StreamKeepsToolNameAndBodyNormalized\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamKeepsToolNameAndBodyNormalized","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.995Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamKeepsToolNameAndBodyNormalized","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.995Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamKeepsToolNameAndBodyNormalized","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_StreamKeepsToolNameAndBodyNormalized (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamKeepsToolNameAndBodyNormalized","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_GroupForceOpenAIFastInjectsMissingTier"}
- {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_GroupForceOpenAIFastInjectsMissingTier","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_GroupForceOpenAIFastInjectsMissingTier\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_GroupForceOpenAIFastInjectsMissingTier","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.995Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=oauth type=oauth model=gpt-5.6-sol stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_GroupForceOpenAIFastInjectsMissingTier","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.995Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"priority\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_GroupForceOpenAIFastInjectsMissingTier","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_GroupForceOpenAIFastInjectsMissingTier (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_GroupForceOpenAIFastInjectsMissingTier","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_PreservesNamespaceRequest"}
- {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_PreservesNamespaceRequest","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_PreservesNamespaceRequest\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_PreservesNamespaceRequest","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.995Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=125 name=acc type=oauth model=gpt-5.5 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_PreservesNamespaceRequest","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.995Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":125,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_PreservesNamespaceRequest","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_PreservesNamespaceRequest (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_PreservesNamespaceRequest","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_FlattenEnabledNamespaceRequestAndStreamResponse"}
- {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_FlattenEnabledNamespaceRequestAndStreamResponse","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_FlattenEnabledNamespaceRequestAndStreamResponse\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_FlattenEnabledNamespaceRequestAndStreamResponse","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.996Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.5 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_FlattenEnabledNamespaceRequestAndStreamResponse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.996Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_FlattenEnabledNamespaceRequestAndStreamResponse","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_FlattenEnabledNamespaceRequestAndStreamResponse (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_FlattenEnabledNamespaceRequestAndStreamResponse","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeOAuth_FlattenEnabledNamespaceRequestAndStreamResponse"}
- {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeOAuth_FlattenEnabledNamespaceRequestAndStreamResponse","Output":"=== RUN TestOpenAIGatewayService_NativeOAuth_FlattenEnabledNamespaceRequestAndStreamResponse\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeOAuth_FlattenEnabledNamespaceRequestAndStreamResponse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.996Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":124,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeOAuth_FlattenEnabledNamespaceRequestAndStreamResponse","Output":"--- PASS: TestOpenAIGatewayService_NativeOAuth_FlattenEnabledNamespaceRequestAndStreamResponse (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeOAuth_FlattenEnabledNamespaceRequestAndStreamResponse","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeOAuth_NamespaceNonStreamingResponse"}
- {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeOAuth_NamespaceNonStreamingResponse","Output":"=== RUN TestOpenAIGatewayService_NativeOAuth_NamespaceNonStreamingResponse\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeOAuth_NamespaceNonStreamingResponse","Output":"--- PASS: TestOpenAIGatewayService_NativeOAuth_NamespaceNonStreamingResponse (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeOAuth_NamespaceNonStreamingResponse","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_NamespaceNonStreamingResponse"}
- {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_NamespaceNonStreamingResponse","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_NamespaceNonStreamingResponse\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_NamespaceNonStreamingResponse","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_NamespaceNonStreamingResponse (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_NamespaceNonStreamingResponse","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_FlattenEnabledNamespaceCollisionReturnsBadRequest"}
- {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_FlattenEnabledNamespaceCollisionReturnsBadRequest","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_FlattenEnabledNamespaceCollisionReturnsBadRequest\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9965688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_FlattenEnabledNamespaceCollisionReturnsBadRequest","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_FlattenEnabledNamespaceCollisionReturnsBadRequest (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9965688+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_FlattenEnabledNamespaceCollisionReturnsBadRequest","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9965688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CompactUsesJSONAndKeepsNonStreaming"}
- {"Time":"2026-09-12T11:38:47.9965688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CompactUsesJSONAndKeepsNonStreaming","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_CompactUsesJSONAndKeepsNonStreaming\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9965688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CompactUsesJSONAndKeepsNonStreaming","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.996Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.1-codex stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9965688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CompactUsesJSONAndKeepsNonStreaming","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.996Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.1-compact\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.9965688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CompactUsesJSONAndKeepsNonStreaming","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_CompactUsesJSONAndKeepsNonStreaming (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9965688+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CompactUsesJSONAndKeepsNonStreaming","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9965688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_UpstreamRequestIgnoresClientCancel"}
- {"Time":"2026-09-12T11:38:47.9965688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_UpstreamRequestIgnoresClientCancel","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_UpstreamRequestIgnoresClientCancel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9965688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_UpstreamRequestIgnoresClientCancel","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.996Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9965688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_UpstreamRequestIgnoresClientCancel","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.996Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.9965688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_UpstreamRequestIgnoresClientCancel","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_UpstreamRequestIgnoresClientCancel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9965688+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_UpstreamRequestIgnoresClientCancel","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9965688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault"}
- {"Time":"2026-09-12T11:38:47.9965688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9965688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=false"}
- {"Time":"2026-09-12T11:38:47.9965688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=false","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=false\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9970782+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=false","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.997Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.1-codex-max stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9970782+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=false","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.997Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.1-codex-max\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.9970782+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=false","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=false (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9970782+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=false","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9970782+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=true"}
- {"Time":"2026-09-12T11:38:47.9970782+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=true","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=true\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9975856+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=true","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.997Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.1-codex-max stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9975856+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=true","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.997Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.1-codex-max\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.9975856+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=true","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=true (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9975856+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=true","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9975856+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9975856+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9975856+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_MissingInstructionsUsesMappedModelTemplate"}
- {"Time":"2026-09-12T11:38:47.9975856+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_MissingInstructionsUsesMappedModelTemplate","Output":"=== RUN TestOpenAIGatewayService_Forward_MissingInstructionsUsesMappedModelTemplate\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9975856+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_MissingInstructionsUsesMappedModelTemplate","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.997Z\",\"msg\":\"[OpenAI] Model mapping applied: astra-public -\u003e gpt-6-astra (account: acc, isCodexCLI: true)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:47.9981212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_MissingInstructionsUsesMappedModelTemplate","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.998Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":123,\"final_model\":\"gpt-6-astra\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.9981212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_MissingInstructionsUsesMappedModelTemplate","Output":"--- PASS: TestOpenAIGatewayService_Forward_MissingInstructionsUsesMappedModelTemplate (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9981212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_MissingInstructionsUsesMappedModelTemplate","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9981212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_DisabledUsesLegacyTransform"}
- {"Time":"2026-09-12T11:38:47.9981212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_DisabledUsesLegacyTransform","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_DisabledUsesLegacyTransform\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9991394+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_DisabledUsesLegacyTransform","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.999Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.9991394+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_DisabledUsesLegacyTransform","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_DisabledUsesLegacyTransform (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9991394+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_DisabledUsesLegacyTransform","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9991394+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_GroupForceOpenAIFastInjectsMissingTier"}
- {"Time":"2026-09-12T11:38:47.9991394+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_GroupForceOpenAIFastInjectsMissingTier","Output":"=== RUN TestOpenAIGatewayService_OAuthLegacy_GroupForceOpenAIFastInjectsMissingTier\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9996496+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_GroupForceOpenAIFastInjectsMissingTier","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.999Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":123,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"priority\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:47.9996496+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_GroupForceOpenAIFastInjectsMissingTier","Output":"--- PASS: TestOpenAIGatewayService_OAuthLegacy_GroupForceOpenAIFastInjectsMissingTier (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:47.9996496+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_GroupForceOpenAIFastInjectsMissingTier","Elapsed":0}
- {"Time":"2026-09-12T11:38:47.9996496+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_GroupForceStillHonorsGlobalFilter"}
- {"Time":"2026-09-12T11:38:47.9996496+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_GroupForceStillHonorsGlobalFilter","Output":"=== RUN TestOpenAIGatewayService_OAuthLegacy_GroupForceStillHonorsGlobalFilter\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0006699+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_GroupForceStillHonorsGlobalFilter","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.000Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":123,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.0006699+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_GroupForceStillHonorsGlobalFilter","Output":"--- PASS: TestOpenAIGatewayService_OAuthLegacy_GroupForceStillHonorsGlobalFilter (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0006699+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_GroupForceStillHonorsGlobalFilter","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.0006699+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_UpstreamRequestIgnoresClientCancel"}
- {"Time":"2026-09-12T11:38:48.0006699+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_UpstreamRequestIgnoresClientCancel","Output":"=== RUN TestOpenAIGatewayService_OAuthLegacy_UpstreamRequestIgnoresClientCancel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0012121+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_UpstreamRequestIgnoresClientCancel","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.001Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.0012121+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_UpstreamRequestIgnoresClientCancel","Output":"--- PASS: TestOpenAIGatewayService_OAuthLegacy_UpstreamRequestIgnoresClientCancel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0012121+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_UpstreamRequestIgnoresClientCancel","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.0012121+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_CompositeCodexUAUsesCodexOriginator"}
- {"Time":"2026-09-12T11:38:48.0012121+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_CompositeCodexUAUsesCodexOriginator","Output":"=== RUN TestOpenAIGatewayService_OAuthLegacy_CompositeCodexUAUsesCodexOriginator\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_CompositeCodexUAUsesCodexOriginator","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.002Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_CompositeCodexUAUsesCodexOriginator","Output":"--- PASS: TestOpenAIGatewayService_OAuthLegacy_CompositeCodexUAUsesCodexOriginator (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_CompositeCodexUAUsesCodexOriginator","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_ResponseHeadersAllowXCodex"}
- {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_ResponseHeadersAllowXCodex","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_ResponseHeadersAllowXCodex\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_ResponseHeadersAllowXCodex","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.002Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_ResponseHeadersAllowXCodex","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.002Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_ResponseHeadersAllowXCodex","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_ResponseHeadersAllowXCodex (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_ResponseHeadersAllowXCodex","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_UpstreamErrorIncludesPassthroughFlag"}
- {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_UpstreamErrorIncludesPassthroughFlag","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_UpstreamErrorIncludesPassthroughFlag\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_UpstreamErrorIncludesPassthroughFlag","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.002Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_UpstreamErrorIncludesPassthroughFlag","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.002Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_UpstreamErrorIncludesPassthroughFlag","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_UpstreamErrorIncludesPassthroughFlag (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_UpstreamErrorIncludesPassthroughFlag","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors"}
- {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/upstream_forbidden_is_reported_as_gateway_failure"}
- {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/upstream_forbidden_is_reported_as_gateway_failure","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/upstream_forbidden_is_reported_as_gateway_failure\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/upstream_forbidden_is_reported_as_gateway_failure","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.002Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=124 name=sensitive-upstream type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/upstream_forbidden_is_reported_as_gateway_failure","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.002Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":124,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/upstream_forbidden_is_reported_as_gateway_failure","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/upstream_forbidden_is_reported_as_gateway_failure (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/upstream_forbidden_is_reported_as_gateway_failure","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/upstream_unauthorized_is_reported_as_gateway_failure"}
- {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/upstream_unauthorized_is_reported_as_gateway_failure","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/upstream_unauthorized_is_reported_as_gateway_failure\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/upstream_unauthorized_is_reported_as_gateway_failure","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.002Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=124 name=sensitive-upstream type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/upstream_unauthorized_is_reported_as_gateway_failure","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.002Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":124,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/upstream_unauthorized_is_reported_as_gateway_failure","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/upstream_unauthorized_is_reported_as_gateway_failure (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/upstream_unauthorized_is_reported_as_gateway_failure","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/html_5xx"}
- {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/html_5xx","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/html_5xx\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/html_5xx","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.002Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=124 name=sensitive-upstream type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/html_5xx","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.002Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":124,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/html_5xx","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/html_5xx (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/html_5xx","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/structured_5xx"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/structured_5xx","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/structured_5xx\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/structured_5xx","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.002Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=124 name=sensitive-upstream type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/structured_5xx","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.002Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":124,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/structured_5xx","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/structured_5xx (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/structured_5xx","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/unstructured_4xx"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/unstructured_4xx","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/unstructured_4xx\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/unstructured_4xx","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.002Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=124 name=sensitive-upstream type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/unstructured_4xx","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.002Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":124,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/unstructured_4xx","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/unstructured_4xx (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/unstructured_4xx","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/malicious_valid_json_4xx"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/malicious_valid_json_4xx","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/malicious_valid_json_4xx\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/malicious_valid_json_4xx","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.002Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=124 name=sensitive-upstream type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/malicious_valid_json_4xx","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.002Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":124,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/malicious_valid_json_4xx","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/malicious_valid_json_4xx (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/malicious_valid_json_4xx","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter","Output":"=== RUN TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/positive_delay_seconds"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/positive_delay_seconds","Output":"=== RUN TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/positive_delay_seconds\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/positive_delay_seconds","Output":"--- PASS: TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/positive_delay_seconds (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/positive_delay_seconds","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/fractional_delay"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/fractional_delay","Output":"=== RUN TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/fractional_delay\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/fractional_delay","Output":"--- PASS: TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/fractional_delay (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/fractional_delay","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/scientific_notation"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/scientific_notation","Output":"=== RUN TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/scientific_notation\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/scientific_notation","Output":"--- PASS: TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/scientific_notation (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/scientific_notation","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/explicit_plus_sign"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/explicit_plus_sign","Output":"=== RUN TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/explicit_plus_sign\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/explicit_plus_sign","Output":"--- PASS: TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/explicit_plus_sign (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/explicit_plus_sign","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/zero"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/zero","Output":"=== RUN TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/zero\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/zero","Output":"--- PASS: TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/zero (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/zero","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/negative_delay"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/negative_delay","Output":"=== RUN TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/negative_delay\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/negative_delay","Output":"--- PASS: TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/negative_delay (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/negative_delay","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/uint64_overflow"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/uint64_overflow","Output":"=== RUN TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/uint64_overflow\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/uint64_overflow","Output":"--- PASS: TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/uint64_overflow (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/uint64_overflow","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/future_http_date"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/future_http_date","Output":"=== RUN TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/future_http_date\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/future_http_date","Output":"--- PASS: TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/future_http_date (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/future_http_date","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/past_http_date"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/past_http_date","Output":"=== RUN TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/past_http_date\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/past_http_date","Output":"--- PASS: TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/past_http_date (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/past_http_date","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter","Output":"--- PASS: TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_CompactErrorBeforeKeepaliveIsSingleJSON"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_CompactErrorBeforeKeepaliveIsSingleJSON","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_CompactErrorBeforeKeepaliveIsSingleJSON\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_CompactErrorBeforeKeepaliveIsSingleJSON","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.002Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=125 name= type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_CompactErrorBeforeKeepaliveIsSingleJSON","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.002Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":125,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_CompactErrorBeforeKeepaliveIsSingleJSON","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_CompactErrorBeforeKeepaliveIsSingleJSON (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_CompactErrorBeforeKeepaliveIsSingleJSON","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_CompactErrorAfterKeepaliveIsFailedSSE"}
- {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_CompactErrorAfterKeepaliveIsFailedSSE","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_CompactErrorAfterKeepaliveIsFailedSSE\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2029836+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_CompactErrorAfterKeepaliveIsFailedSSE","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.202Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=126 name= type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.2029836+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_CompactErrorAfterKeepaliveIsFailedSSE","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.202Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":126,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2029836+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_CompactErrorAfterKeepaliveIsFailedSSE","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_CompactErrorAfterKeepaliveIsFailedSSE (0.20s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2029836+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_CompactErrorAfterKeepaliveIsFailedSSE","Elapsed":0.2}
- {"Time":"2026-09-12T11:38:48.2029836+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover"}
- {"Time":"2026-09-12T11:38:48.2029836+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover","Output":"=== RUN TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2029836+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_429_rate_limit"}
- {"Time":"2026-09-12T11:38:48.2029836+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_429_rate_limit","Output":"=== RUN TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_429_rate_limit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2029836+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_429_rate_limit","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.202Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.2029836+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_429_rate_limit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.202Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2029836+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_429_rate_limit","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.202Z\",\"logger\":\"slog\",\"msg\":\"account_rate_limited\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":123,\"platform\":\"openai\",\"reset_at\":\"2026-09-19T03:38:48.000Z\",\"reset_in\":604799000}\n"}
- {"Time":"2026-09-12T11:38:48.2029836+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_429_rate_limit","Output":"--- PASS: TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_429_rate_limit (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2029836+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_429_rate_limit","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2029836+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_529_overload"}
- {"Time":"2026-09-12T11:38:48.2029836+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_529_overload","Output":"=== RUN TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_529_overload\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2029836+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_529_overload","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.202Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.2029836+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_529_overload","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.202Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_529_overload","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.202Z\",\"logger\":\"slog\",\"msg\":\"account_overloaded\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":123,\"until\":\"2026-09-12T03:48:48.202Z\"}\n"}
- {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_529_overload","Output":"--- PASS: TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_529_overload (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_529_overload","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_502_bad_gateway"}
- {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_502_bad_gateway","Output":"=== RUN TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_502_bad_gateway\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_502_bad_gateway","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.203Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_502_bad_gateway","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.203Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_502_bad_gateway","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:48.203Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":123,\"status_code\":502}\n"}
- {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_502_bad_gateway","Output":"--- PASS: TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_502_bad_gateway (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_502_bad_gateway","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_503_unavailable"}
- {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_503_unavailable","Output":"=== RUN TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_503_unavailable\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_503_unavailable","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.203Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_503_unavailable","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.203Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_503_unavailable","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:48.203Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":123,\"status_code\":503}\n"}
- {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_503_unavailable","Output":"--- PASS: TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_503_unavailable (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_503_unavailable","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_504_gateway_timeout"}
- {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_504_gateway_timeout","Output":"=== RUN TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_504_gateway_timeout\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_504_gateway_timeout","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.203Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_504_gateway_timeout","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.203Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_504_gateway_timeout","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:48.203Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":123,\"status_code\":504}\n"}
- {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_504_gateway_timeout","Output":"--- PASS: TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_504_gateway_timeout (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_504_gateway_timeout","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/apikey_429_rate_limit"}
- {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/apikey_429_rate_limit","Output":"=== RUN TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/apikey_429_rate_limit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/apikey_429_rate_limit","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.203Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/apikey_429_rate_limit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.203Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/apikey_429_rate_limit","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.203Z\",\"logger\":\"slog\",\"msg\":\"account_rate_limited\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":123,\"platform\":\"openai\",\"reset_at\":\"2026-09-19T03:38:48.000Z\",\"reset_in\":604799000}\n"}
- {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/apikey_429_rate_limit","Output":"--- PASS: TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/apikey_429_rate_limit (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/apikey_429_rate_limit","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/apikey_529_overload"}
- {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/apikey_529_overload","Output":"=== RUN TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/apikey_529_overload\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/apikey_529_overload","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.203Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/apikey_529_overload","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.203Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/apikey_529_overload","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.203Z\",\"logger\":\"slog\",\"msg\":\"account_overloaded\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":123,\"until\":\"2026-09-12T03:48:48.203Z\"}\n"}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/apikey_529_overload","Output":"--- PASS: TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/apikey_529_overload (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/apikey_529_overload","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover","Output":"--- PASS: TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover"}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_500"}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_500","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_500\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_500","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=124 name=api-key-transient-5xx type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_500","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":124,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_500","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_500 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_500","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_502"}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_502","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_502\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_502","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=124 name=api-key-transient-5xx type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_502","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":124,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_502","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_502 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_502","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_503"}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_503","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_503\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_503","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=124 name=api-key-transient-5xx type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_503","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":124,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_503","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_503 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_503","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_504"}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_504","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_504\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_504","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=124 name=api-key-transient-5xx type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_504","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":124,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_504","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_504 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_504","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_520"}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_520","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_520\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_520","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=124 name=api-key-transient-5xx type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_520","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":124,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_520","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_520 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_520","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_521"}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_521","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_521\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_521","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=124 name=api-key-transient-5xx type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_521","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":124,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_521","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_521 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_521","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_522"}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_522","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_522\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_522","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=124 name=api-key-transient-5xx type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_522","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":124,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_522","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_522 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_522","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_523"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_523","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_523\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_523","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=124 name=api-key-transient-5xx type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_523","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":124,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_523","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_523 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_523","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_524"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_524","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_524\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_524","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=124 name=api-key-transient-5xx type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_524","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":124,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_524","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_524 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_524","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ContextWindow502DoesNotFailover"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ContextWindow502DoesNotFailover","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_ContextWindow502DoesNotFailover\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ContextWindow502DoesNotFailover","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=127 name= type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ContextWindow502DoesNotFailover","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":127,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ContextWindow502DoesNotFailover","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_ContextWindow502DoesNotFailover (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ContextWindow502DoesNotFailover","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeConfigured5xxRetriesSameAccount"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeConfigured5xxRetriesSameAccount","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_PoolModeConfigured5xxRetriesSameAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeConfigured5xxRetriesSameAccount","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=128 name= type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeConfigured5xxRetriesSameAccount","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":128,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeConfigured5xxRetriesSameAccount","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_PoolModeConfigured5xxRetriesSameAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeConfigured5xxRetriesSameAccount","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover/configured_401"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover/configured_401","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover/configured_401\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover/configured_401","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=129 name= type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover/configured_401","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":129,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover/configured_401","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.204Z\",\"logger\":\"slog\",\"msg\":\"pool_mode_error_skipped\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":129,\"status_code\":401}\n"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover/configured_401","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover/configured_401 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover/configured_401","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover/default_403"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover/default_403","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover/default_403\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover/default_403","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=129 name= type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover/default_403","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":129,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover/default_403","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.204Z\",\"logger\":\"slog\",\"msg\":\"pool_mode_error_skipped\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":129,\"status_code\":403}\n"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover/default_403","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover/default_403 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover/default_403","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover","Output":"=== RUN TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover/request_error"}
- {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover/request_error","Output":"=== RUN TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover/request_error\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover/request_error","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.205Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.5 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover/request_error","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.205Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover/request_error","Output":"--- PASS: TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover/request_error (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover/request_error","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover/read_error"}
- {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover/read_error","Output":"=== RUN TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover/read_error\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover/read_error","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.205Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.5 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover/read_error","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.205Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover/read_error","Output":"--- PASS: TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover/read_error (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover/read_error","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover","Output":"--- PASS: TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_NonCodexUAFallbackToCodexUA"}
- {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_NonCodexUAFallbackToCodexUA","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_NonCodexUAFallbackToCodexUA\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_NonCodexUAFallbackToCodexUA","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.205Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_NonCodexUAFallbackToCodexUA","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.205Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_NonCodexUAFallbackToCodexUA","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_NonCodexUAFallbackToCodexUA (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_NonCodexUAFallbackToCodexUA","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_OfficialIdentityUnified"}
- {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_OfficialIdentityUnified","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_OfficialIdentityUnified\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_OfficialIdentityUnified","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.205Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_OfficialIdentityUnified","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.205Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_OfficialIdentityUnified","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_OfficialIdentityUnified (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_OfficialIdentityUnified","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexTuiIdentityUnified"}
- {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexTuiIdentityUnified","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_CodexTuiIdentityUnified\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexTuiIdentityUnified","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.205Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexTuiIdentityUnified","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.205Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexTuiIdentityUnified","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_CodexTuiIdentityUnified (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexTuiIdentityUnified","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPTransformedHeaderBodyParityAndDefaultCacheKey"}
- {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPTransformedHeaderBodyParityAndDefaultCacheKey","Output":"=== RUN TestOpenAIGatewayService_CodexFingerprintHTTPTransformedHeaderBodyParityAndDefaultCacheKey\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2064654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPTransformedHeaderBodyParityAndDefaultCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.206Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":4401,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2064654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPTransformedHeaderBodyParityAndDefaultCacheKey","Output":"--- PASS: TestOpenAIGatewayService_CodexFingerprintHTTPTransformedHeaderBodyParityAndDefaultCacheKey (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2064654+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPTransformedHeaderBodyParityAndDefaultCacheKey","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2064654+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPRawPassthroughHeaderBodyParityAndDefaultCacheKey"}
- {"Time":"2026-09-12T11:38:48.2064654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPRawPassthroughHeaderBodyParityAndDefaultCacheKey","Output":"=== RUN TestOpenAIGatewayService_CodexFingerprintHTTPRawPassthroughHeaderBodyParityAndDefaultCacheKey\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2069795+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPRawPassthroughHeaderBodyParityAndDefaultCacheKey","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.206Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=4402 name=oauth-raw type=oauth model=gpt-5.6-sol stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.2069795+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPRawPassthroughHeaderBodyParityAndDefaultCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.206Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":4402,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2069795+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPRawPassthroughHeaderBodyParityAndDefaultCacheKey","Output":"--- PASS: TestOpenAIGatewayService_CodexFingerprintHTTPRawPassthroughHeaderBodyParityAndDefaultCacheKey (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2069795+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPRawPassthroughHeaderBodyParityAndDefaultCacheKey","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2069795+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintCompactDoesNotRewriteBodyCacheKeyOrMetadata"}
- {"Time":"2026-09-12T11:38:48.2069795+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintCompactDoesNotRewriteBodyCacheKeyOrMetadata","Output":"=== RUN TestOpenAIGatewayService_CodexFingerprintCompactDoesNotRewriteBodyCacheKeyOrMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2074923+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintCompactDoesNotRewriteBodyCacheKeyOrMetadata","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.207Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":4403,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2074923+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintCompactDoesNotRewriteBodyCacheKeyOrMetadata","Output":"--- PASS: TestOpenAIGatewayService_CodexFingerprintCompactDoesNotRewriteBodyCacheKeyOrMetadata (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2074923+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintCompactDoesNotRewriteBodyCacheKeyOrMetadata","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2074923+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintMessagesBridgeDoesNotInjectBodyPromptCacheKey"}
- {"Time":"2026-09-12T11:38:48.2074923+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintMessagesBridgeDoesNotInjectBodyPromptCacheKey","Output":"=== RUN TestOpenAIGatewayService_CodexFingerprintMessagesBridgeDoesNotInjectBodyPromptCacheKey\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2074923+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintMessagesBridgeDoesNotInjectBodyPromptCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.207Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":4404,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintMessagesBridgeDoesNotInjectBodyPromptCacheKey","Output":"--- PASS: TestOpenAIGatewayService_CodexFingerprintMessagesBridgeDoesNotInjectBodyPromptCacheKey (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintMessagesBridgeDoesNotInjectBodyPromptCacheKey","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_RejectsNonCodexClient"}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_RejectsNonCodexClient","Output":"=== RUN TestOpenAIGatewayService_CodexCLIOnly_RejectsNonCodexClient\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_RejectsNonCodexClient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"OpenAI codex_cli_only 拒绝非官方客户端请求\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":123,\"codex_cli_only_enabled\":true,\"codex_official_client_match\":false,\"reject_reason\":\"official_client_user_agent_not_matched\",\"request_method\":\"POST\",\"request_path\":\"/v1/responses\",\"request_query\":\"\",\"request_host\":\"example.com\",\"request_client_ip\":\"192.0.2.1\",\"request_remote_addr\":\"192.0.2.1:1234\",\"request_user_agent\":\"curl/8.0\",\"request_content_type\":\"\",\"request_content_length\":0,\"request_stream\":false,\"request_model\":\"gpt-5.2\",\"request_headers\":{\"user-agent\":\"curl/8.0\"},\"request_body_size\":85}\n"}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_RejectsNonCodexClient","Output":"--- PASS: TestOpenAIGatewayService_CodexCLIOnly_RejectsNonCodexClient (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_RejectsNonCodexClient","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies"}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies","Output":"=== RUN TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_cli_rs"}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_cli_rs","Output":"=== RUN TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_cli_rs\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_cli_rs","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"OpenAI codex_cli_only 放行请求\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":123,\"codex_cli_only_enabled\":true,\"codex_official_client_match\":true,\"reject_reason\":\"official_client_user_agent_matched\"}\n"}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_cli_rs","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_cli_rs","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_cli_rs","Output":"--- PASS: TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_cli_rs (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_cli_rs","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_vscode"}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_vscode","Output":"=== RUN TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_vscode\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_vscode","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"OpenAI codex_cli_only 放行请求\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":123,\"codex_cli_only_enabled\":true,\"codex_official_client_match\":true,\"reject_reason\":\"official_client_user_agent_matched\"}\n"}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_vscode","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_vscode","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_vscode","Output":"--- PASS: TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_vscode (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_vscode","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_app"}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_app","Output":"=== RUN TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_app\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_app","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"OpenAI codex_cli_only 放行请求\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":123,\"codex_cli_only_enabled\":true,\"codex_official_client_match\":true,\"reject_reason\":\"official_client_user_agent_matched\"}\n"}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_app","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_app","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_app","Output":"--- PASS: TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_app (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_app","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/originator_codex_chatgpt_desktop"}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/originator_codex_chatgpt_desktop","Output":"=== RUN TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/originator_codex_chatgpt_desktop\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/originator_codex_chatgpt_desktop","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"OpenAI codex_cli_only 放行请求\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":123,\"codex_cli_only_enabled\":true,\"codex_official_client_match\":true,\"reject_reason\":\"official_client_originator_matched\"}\n"}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/originator_codex_chatgpt_desktop","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/originator_codex_chatgpt_desktop","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/originator_codex_chatgpt_desktop","Output":"--- PASS: TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/originator_codex_chatgpt_desktop (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/originator_codex_chatgpt_desktop","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies","Output":"--- PASS: TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamingSetsFirstTokenMs"}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamingSetsFirstTokenMs","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_StreamingSetsFirstTokenMs\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamingSetsFirstTokenMs","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamingSetsFirstTokenMs","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"priority\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamingSetsFirstTokenMs","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_StreamingSetsFirstTokenMs (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamingSetsFirstTokenMs","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamClientDisconnectStillCollectsUsage"}
- {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamClientDisconnectStillCollectsUsage","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_StreamClientDisconnectStillCollectsUsage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamClientDisconnectStillCollectsUsage","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamClientDisconnectStillCollectsUsage","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamClientDisconnectStillCollectsUsage","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"[OpenAI passthrough] Client disconnected during streaming, continue draining upstream for usage: account=123\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamClientDisconnectStillCollectsUsage","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_StreamClientDisconnectStillCollectsUsage (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamClientDisconnectStillCollectsUsage","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PreservesBodyAndUsesResponsesEndpoint"}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PreservesBodyAndUsesResponsesEndpoint","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_PreservesBodyAndUsesResponsesEndpoint\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PreservesBodyAndUsesResponsesEndpoint","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=456 name=apikey-acc type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PreservesBodyAndUsesResponsesEndpoint","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":456,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"flex\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PreservesBodyAndUsesResponsesEndpoint","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_PreservesBodyAndUsesResponsesEndpoint (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PreservesBodyAndUsesResponsesEndpoint","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_WarnOnTimeoutHeadersForStream"}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_WarnOnTimeoutHeadersForStream","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_WarnOnTimeoutHeadersForStream\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_WarnOnTimeoutHeadersForStream","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=321 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_WarnOnTimeoutHeadersForStream","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"OpenAI passthrough 检测到超时相关请求头,将按配置过滤以降低断流风险\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":321,\"timeout_headers\":[\"x-stainless-timeout=10000\"]}\n"}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_WarnOnTimeoutHeadersForStream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":321,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_WarnOnTimeoutHeadersForStream","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_WarnOnTimeoutHeadersForStream (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_WarnOnTimeoutHeadersForStream","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_InfoWhenStreamEndsWithoutDone"}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_InfoWhenStreamEndsWithoutDone","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_InfoWhenStreamEndsWithoutDone\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_InfoWhenStreamEndsWithoutDone","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=654 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_InfoWhenStreamEndsWithoutDone","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":654,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_InfoWhenStreamEndsWithoutDone","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"OpenAI passthrough 上游流在未收到 [DONE] 时结束,疑似断流\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":654,\"upstream_request_id\":\"rid-truncate\"}\n"}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_InfoWhenStreamEndsWithoutDone","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_InfoWhenStreamEndsWithoutDone (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_InfoWhenStreamEndsWithoutDone","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_DefaultFiltersTimeoutHeaders"}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_DefaultFiltersTimeoutHeaders","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_DefaultFiltersTimeoutHeaders\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_DefaultFiltersTimeoutHeaders","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=111 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_DefaultFiltersTimeoutHeaders","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"OpenAI passthrough 检测到超时相关请求头,将按配置过滤以降低断流风险\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":111,\"timeout_headers\":[\"x-stainless-timeout=120000\"]}\n"}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_DefaultFiltersTimeoutHeaders","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":111,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_DefaultFiltersTimeoutHeaders","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_DefaultFiltersTimeoutHeaders (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_DefaultFiltersTimeoutHeaders","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_AllowTimeoutHeadersWhenConfigured"}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_AllowTimeoutHeadersWhenConfigured","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_AllowTimeoutHeadersWhenConfigured\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_AllowTimeoutHeadersWhenConfigured","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=222 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_AllowTimeoutHeadersWhenConfigured","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"OpenAI passthrough 透传请求包含超时相关请求头,且当前配置为放行,可能导致上游提前断流\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":222,\"timeout_headers\":[\"x-stainless-timeout=120000\"]}\n"}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_AllowTimeoutHeadersWhenConfigured","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":222,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_AllowTimeoutHeadersWhenConfigured","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_AllowTimeoutHeadersWhenConfigured (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_AllowTimeoutHeadersWhenConfigured","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_GenerateAuthURL_OpenAIKeepsCodexFlow"}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_GenerateAuthURL_OpenAIKeepsCodexFlow","Output":"=== RUN TestOpenAIOAuthService_GenerateAuthURL_OpenAIKeepsCodexFlow\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_GenerateAuthURL_OpenAIKeepsCodexFlow","Output":"--- PASS: TestOpenAIOAuthService_GenerateAuthURL_OpenAIKeepsCodexFlow (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2090244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_GenerateAuthURL_OpenAIKeepsCodexFlow","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2090244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_RefreshAccountToken_NoRefreshTokenUsesExistingAccessToken"}
- {"Time":"2026-09-12T11:38:48.2090244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_RefreshAccountToken_NoRefreshTokenUsesExistingAccessToken","Output":"=== RUN TestOpenAIOAuthService_RefreshAccountToken_NoRefreshTokenUsesExistingAccessToken\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2090244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_RefreshAccountToken_NoRefreshTokenUsesExistingAccessToken","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.209Z\",\"logger\":\"slog\",\"msg\":\"chatgpt_account_check_client_error\",\"service\":\"sub2api\",\"env\":\"test\",\"error\":\"stop before request\"}\n"}
- {"Time":"2026-09-12T11:38:48.2090244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_RefreshAccountToken_NoRefreshTokenUsesExistingAccessToken","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:48.209Z\",\"logger\":\"slog\",\"msg\":\"openai_privacy_client_error\",\"service\":\"sub2api\",\"env\":\"test\",\"error\":\"stop before request\"}\n"}
- {"Time":"2026-09-12T11:38:48.2090244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_RefreshAccountToken_NoRefreshTokenUsesExistingAccessToken","Output":"--- PASS: TestOpenAIOAuthService_RefreshAccountToken_NoRefreshTokenUsesExistingAccessToken (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2090244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_RefreshAccountToken_NoRefreshTokenUsesExistingAccessToken","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2090244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_RefreshAccountToken_PATIgnoresStaleRefreshToken"}
- {"Time":"2026-09-12T11:38:48.2090244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_RefreshAccountToken_PATIgnoresStaleRefreshToken","Output":"=== RUN TestOpenAIOAuthService_RefreshAccountToken_PATIgnoresStaleRefreshToken\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2095539+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_RefreshAccountToken_PATIgnoresStaleRefreshToken","Output":"--- PASS: TestOpenAIOAuthService_RefreshAccountToken_PATIgnoresStaleRefreshToken (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2095539+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_RefreshAccountToken_PATIgnoresStaleRefreshToken","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2095539+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAITokenRefresher_NeedsRefresh_SkipsAccountWithoutRefreshToken"}
- {"Time":"2026-09-12T11:38:48.2095539+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAITokenRefresher_NeedsRefresh_SkipsAccountWithoutRefreshToken","Output":"=== RUN TestOpenAITokenRefresher_NeedsRefresh_SkipsAccountWithoutRefreshToken\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2095539+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAITokenRefresher_NeedsRefresh_SkipsAccountWithoutRefreshToken","Output":"--- PASS: TestOpenAITokenRefresher_NeedsRefresh_SkipsAccountWithoutRefreshToken (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2095539+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAITokenRefresher_NeedsRefresh_SkipsAccountWithoutRefreshToken","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2095539+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAITokenRefresher_Refresh_PATRemovesStaleOAuthFields"}
- {"Time":"2026-09-12T11:38:48.2095539+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAITokenRefresher_Refresh_PATRemovesStaleOAuthFields","Output":"=== RUN TestOpenAITokenRefresher_Refresh_PATRemovesStaleOAuthFields\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2095539+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAITokenRefresher_Refresh_PATRemovesStaleOAuthFields","Output":"--- PASS: TestOpenAITokenRefresher_Refresh_PATRemovesStaleOAuthFields (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2095539+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAITokenRefresher_Refresh_PATRemovesStaleOAuthFields","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2095539+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAITokenProvider_NoRefreshTokenExpiredAccessTokenReturnsError"}
- {"Time":"2026-09-12T11:38:48.2095539+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAITokenProvider_NoRefreshTokenExpiredAccessTokenReturnsError","Output":"=== RUN TestOpenAITokenProvider_NoRefreshTokenExpiredAccessTokenReturnsError\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2095539+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAITokenProvider_NoRefreshTokenExpiredAccessTokenReturnsError","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.209Z\",\"logger\":\"slog\",\"msg\":\"openai_token_cache_miss\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":0}\n"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAITokenProvider_NoRefreshTokenExpiredAccessTokenReturnsError","Output":"--- PASS: TestOpenAITokenProvider_NoRefreshTokenExpiredAccessTokenReturnsError (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAITokenProvider_NoRefreshTokenExpiredAccessTokenReturnsError","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ExchangeCode_StateRequired"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ExchangeCode_StateRequired","Output":"=== RUN TestOpenAIOAuthService_ExchangeCode_StateRequired\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ExchangeCode_StateRequired","Output":"--- PASS: TestOpenAIOAuthService_ExchangeCode_StateRequired (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ExchangeCode_StateRequired","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ExchangeCode_StateMismatch"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ExchangeCode_StateMismatch","Output":"=== RUN TestOpenAIOAuthService_ExchangeCode_StateMismatch\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ExchangeCode_StateMismatch","Output":"--- PASS: TestOpenAIOAuthService_ExchangeCode_StateMismatch (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ExchangeCode_StateMismatch","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ExchangeCode_StateMatch"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ExchangeCode_StateMatch","Output":"=== RUN TestOpenAIOAuthService_ExchangeCode_StateMatch\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ExchangeCode_StateMatch","Output":"--- PASS: TestOpenAIOAuthService_ExchangeCode_StateMatch (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ExchangeCode_StateMatch","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_RemovesUnsupportedUser"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_RemovesUnsupportedUser","Output":"=== RUN TestNormalizeOpenAIPassthroughOAuthBody_RemovesUnsupportedUser\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_RemovesUnsupportedUser","Output":"--- PASS: TestNormalizeOpenAIPassthroughOAuthBody_RemovesUnsupportedUser (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_RemovesUnsupportedUser","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_NormalizesCompatibilityFields"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_NormalizesCompatibilityFields","Output":"=== RUN TestNormalizeOpenAIPassthroughOAuthBody_NormalizesCompatibilityFields\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_NormalizesCompatibilityFields","Output":"--- PASS: TestNormalizeOpenAIPassthroughOAuthBody_NormalizesCompatibilityFields (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_NormalizesCompatibilityFields","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_NormalizesReasoningMode"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_NormalizesReasoningMode","Output":"=== RUN TestNormalizeOpenAIPassthroughOAuthBody_NormalizesReasoningMode\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_NormalizesReasoningMode","Output":"--- PASS: TestNormalizeOpenAIPassthroughOAuthBody_NormalizesReasoningMode (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_NormalizesReasoningMode","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIOAuthResponsesCompatibilityBody_PreservesExplicitInput"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIOAuthResponsesCompatibilityBody_PreservesExplicitInput","Output":"=== RUN TestNormalizeOpenAIOAuthResponsesCompatibilityBody_PreservesExplicitInput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIOAuthResponsesCompatibilityBody_PreservesExplicitInput","Output":"--- PASS: TestNormalizeOpenAIOAuthResponsesCompatibilityBody_PreservesExplicitInput (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIOAuthResponsesCompatibilityBody_PreservesExplicitInput","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_OnlyStripsOAuthFields"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_OnlyStripsOAuthFields","Output":"=== RUN TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_OnlyStripsOAuthFields\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_OnlyStripsOAuthFields","Output":"--- PASS: TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_OnlyStripsOAuthFields (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_OnlyStripsOAuthFields","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_SanitizesNativeItemIDs"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_SanitizesNativeItemIDs","Output":"=== RUN TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_SanitizesNativeItemIDs\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_SanitizesNativeItemIDs","Output":"--- PASS: TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_SanitizesNativeItemIDs (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_SanitizesNativeItemIDs","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_APIKeyStoreFalseReplay"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_APIKeyStoreFalseReplay","Output":"=== RUN TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_APIKeyStoreFalseReplay\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_APIKeyStoreFalseReplay","Output":"--- PASS: TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_APIKeyStoreFalseReplay (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_APIKeyStoreFalseReplay","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode","Output":"=== RUN TestNormalizeOpenAIResponsesReasoningMode\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode/pro_maps_to_max"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode/pro_maps_to_max","Output":"=== RUN TestNormalizeOpenAIResponsesReasoningMode/pro_maps_to_max\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode/pro_maps_to_max","Output":"--- PASS: TestNormalizeOpenAIResponsesReasoningMode/pro_maps_to_max (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode/pro_maps_to_max","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode/explicit_effort_wins"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode/explicit_effort_wins","Output":"=== RUN TestNormalizeOpenAIResponsesReasoningMode/explicit_effort_wins\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode/explicit_effort_wins","Output":"--- PASS: TestNormalizeOpenAIResponsesReasoningMode/explicit_effort_wins (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode/explicit_effort_wins","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode/other_mode_only_removed"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode/other_mode_only_removed","Output":"=== RUN TestNormalizeOpenAIResponsesReasoningMode/other_mode_only_removed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode/other_mode_only_removed","Output":"--- PASS: TestNormalizeOpenAIResponsesReasoningMode/other_mode_only_removed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode/other_mode_only_removed","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode","Output":"--- PASS: TestNormalizeOpenAIResponsesReasoningMode (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody","Output":"=== RUN TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/pro_+_max_preserved"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/pro_+_max_preserved","Output":"=== RUN TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/pro_+_max_preserved\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/pro_+_max_preserved","Output":"--- PASS: TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/pro_+_max_preserved (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/pro_+_max_preserved","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/standard_+_max_preserved"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/standard_+_max_preserved","Output":"=== RUN TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/standard_+_max_preserved\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/standard_+_max_preserved","Output":"--- PASS: TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/standard_+_max_preserved (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/standard_+_max_preserved","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/missing_mode_+_max_preserved"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/missing_mode_+_max_preserved","Output":"=== RUN TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/missing_mode_+_max_preserved\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/missing_mode_+_max_preserved","Output":"--- PASS: TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/missing_mode_+_max_preserved (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/missing_mode_+_max_preserved","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/pro_+_explicit_high_preserved"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/pro_+_explicit_high_preserved","Output":"=== RUN TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/pro_+_explicit_high_preserved\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/pro_+_explicit_high_preserved","Output":"--- PASS: TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/pro_+_explicit_high_preserved (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/pro_+_explicit_high_preserved","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/pro_without_effort_does_not_inject_max"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/pro_without_effort_does_not_inject_max","Output":"=== RUN TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/pro_without_effort_does_not_inject_max\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/pro_without_effort_does_not_inject_max","Output":"--- PASS: TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/pro_without_effort_does_not_inject_max (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/pro_without_effort_does_not_inject_max","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody","Output":"--- PASS: TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_NonAstraKeepsLegacyBehavior"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_NonAstraKeepsLegacyBehavior","Output":"=== RUN TestNormalizeOpenAIResponsesReasoningMode_NonAstraKeepsLegacyBehavior\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_NonAstraKeepsLegacyBehavior/gpt-5.6-sol_pro_maps_to_max"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_NonAstraKeepsLegacyBehavior/gpt-5.6-sol_pro_maps_to_max","Output":"=== RUN TestNormalizeOpenAIResponsesReasoningMode_NonAstraKeepsLegacyBehavior/gpt-5.6-sol_pro_maps_to_max\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_NonAstraKeepsLegacyBehavior/gpt-5.6-sol_pro_maps_to_max","Output":"--- PASS: TestNormalizeOpenAIResponsesReasoningMode_NonAstraKeepsLegacyBehavior/gpt-5.6-sol_pro_maps_to_max (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_NonAstraKeepsLegacyBehavior/gpt-5.6-sol_pro_maps_to_max","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_NonAstraKeepsLegacyBehavior/gpt-5.4_explicit_effort_wins"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_NonAstraKeepsLegacyBehavior/gpt-5.4_explicit_effort_wins","Output":"=== RUN TestNormalizeOpenAIResponsesReasoningMode_NonAstraKeepsLegacyBehavior/gpt-5.4_explicit_effort_wins\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_NonAstraKeepsLegacyBehavior/gpt-5.4_explicit_effort_wins","Output":"--- PASS: TestNormalizeOpenAIResponsesReasoningMode_NonAstraKeepsLegacyBehavior/gpt-5.4_explicit_effort_wins (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_NonAstraKeepsLegacyBehavior/gpt-5.4_explicit_effort_wins","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_NonAstraKeepsLegacyBehavior","Output":"--- PASS: TestNormalizeOpenAIResponsesReasoningMode_NonAstraKeepsLegacyBehavior (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_NonAstraKeepsLegacyBehavior","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_AstraPreservesReasoningMode"}
- {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_AstraPreservesReasoningMode","Output":"=== RUN TestNormalizeOpenAIPassthroughOAuthBody_AstraPreservesReasoningMode\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_AstraPreservesReasoningMode","Output":"--- PASS: TestNormalizeOpenAIPassthroughOAuthBody_AstraPreservesReasoningMode (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_AstraPreservesReasoningMode","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_AstraPreservesReasoningMode"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_AstraPreservesReasoningMode","Output":"=== RUN TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_AstraPreservesReasoningMode\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_AstraPreservesReasoningMode","Output":"--- PASS: TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_AstraPreservesReasoningMode (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_AstraPreservesReasoningMode","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_ReasoningModeAccountScope"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_ReasoningModeAccountScope","Output":"=== RUN TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_ReasoningModeAccountScope\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_ReasoningModeAccountScope","Output":"--- PASS: TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_ReasoningModeAccountScope (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_ReasoningModeAccountScope","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_SanitizesToolSchemas"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_SanitizesToolSchemas","Output":"=== RUN TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_SanitizesToolSchemas\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_SanitizesToolSchemas","Output":"--- PASS: TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_SanitizesToolSchemas (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_SanitizesToolSchemas","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponseFormatSchemasBody_PreservesNonStrictOptionalFields"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponseFormatSchemasBody_PreservesNonStrictOptionalFields","Output":"=== RUN TestNormalizeOpenAIResponseFormatSchemasBody_PreservesNonStrictOptionalFields\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponseFormatSchemasBody_PreservesNonStrictOptionalFields","Output":"--- PASS: TestNormalizeOpenAIResponseFormatSchemasBody_PreservesNonStrictOptionalFields (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponseFormatSchemasBody_PreservesNonStrictOptionalFields","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponseFormatSchemasBody_DoesNotExpandStrictSchema"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponseFormatSchemasBody_DoesNotExpandStrictSchema","Output":"=== RUN TestNormalizeOpenAIResponseFormatSchemasBody_DoesNotExpandStrictSchema\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponseFormatSchemasBody_DoesNotExpandStrictSchema","Output":"--- PASS: TestNormalizeOpenAIResponseFormatSchemasBody_DoesNotExpandStrictSchema (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponseFormatSchemasBody_DoesNotExpandStrictSchema","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponseFormatSchemasBody_TraversesNestedSchemaContainers"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponseFormatSchemasBody_TraversesNestedSchemaContainers","Output":"=== RUN TestNormalizeOpenAIResponseFormatSchemasBody_TraversesNestedSchemaContainers\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponseFormatSchemasBody_TraversesNestedSchemaContainers","Output":"--- PASS: TestNormalizeOpenAIResponseFormatSchemasBody_TraversesNestedSchemaContainers (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponseFormatSchemasBody_TraversesNestedSchemaContainers","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponseFormatSchemasBody_PreservesExistingTypeValues"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponseFormatSchemasBody_PreservesExistingTypeValues","Output":"=== RUN TestNormalizeOpenAIResponseFormatSchemasBody_PreservesExistingTypeValues\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponseFormatSchemasBody_PreservesExistingTypeValues","Output":"--- PASS: TestNormalizeOpenAIResponseFormatSchemasBody_PreservesExistingTypeValues (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponseFormatSchemasBody_PreservesExistingTypeValues","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_CompactRemovesUnsupportedUser"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_CompactRemovesUnsupportedUser","Output":"=== RUN TestNormalizeOpenAIPassthroughOAuthBody_CompactRemovesUnsupportedUser\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_CompactRemovesUnsupportedUser","Output":"--- PASS: TestNormalizeOpenAIPassthroughOAuthBody_CompactRemovesUnsupportedUser (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_CompactRemovesUnsupportedUser","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_StringInputWrappedAsArray"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_StringInputWrappedAsArray","Output":"=== RUN TestNormalizeOpenAIPassthroughOAuthBody_StringInputWrappedAsArray\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_StringInputWrappedAsArray","Output":"--- PASS: TestNormalizeOpenAIPassthroughOAuthBody_StringInputWrappedAsArray (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_StringInputWrappedAsArray","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_EmptyStringInputWrappedAsEmptyArray"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_EmptyStringInputWrappedAsEmptyArray","Output":"=== RUN TestNormalizeOpenAIPassthroughOAuthBody_EmptyStringInputWrappedAsEmptyArray\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_EmptyStringInputWrappedAsEmptyArray","Output":"--- PASS: TestNormalizeOpenAIPassthroughOAuthBody_EmptyStringInputWrappedAsEmptyArray (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_EmptyStringInputWrappedAsEmptyArray","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_ObjectInputWrappedAsArray"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_ObjectInputWrappedAsArray","Output":"=== RUN TestNormalizeOpenAIPassthroughOAuthBody_ObjectInputWrappedAsArray\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_ObjectInputWrappedAsArray","Output":"--- PASS: TestNormalizeOpenAIPassthroughOAuthBody_ObjectInputWrappedAsArray (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_ObjectInputWrappedAsArray","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_ArrayInputUnchanged"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_ArrayInputUnchanged","Output":"=== RUN TestNormalizeOpenAIPassthroughOAuthBody_ArrayInputUnchanged\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_ArrayInputUnchanged","Output":"--- PASS: TestNormalizeOpenAIPassthroughOAuthBody_ArrayInputUnchanged (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_ArrayInputUnchanged","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason","Output":"=== RUN TestDetectOpenAIPassthroughInstructionsRejectReason\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason/missing_is_optional"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason/missing_is_optional","Output":"=== RUN TestDetectOpenAIPassthroughInstructionsRejectReason/missing_is_optional\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason/missing_is_optional","Output":"--- PASS: TestDetectOpenAIPassthroughInstructionsRejectReason/missing_is_optional (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason/missing_is_optional","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason/non_string_remains_rejected"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason/non_string_remains_rejected","Output":"=== RUN TestDetectOpenAIPassthroughInstructionsRejectReason/non_string_remains_rejected\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason/non_string_remains_rejected","Output":"--- PASS: TestDetectOpenAIPassthroughInstructionsRejectReason/non_string_remains_rejected (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason/non_string_remains_rejected","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason/empty_remains_rejected"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason/empty_remains_rejected","Output":"=== RUN TestDetectOpenAIPassthroughInstructionsRejectReason/empty_remains_rejected\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason/empty_remains_rejected","Output":"--- PASS: TestDetectOpenAIPassthroughInstructionsRejectReason/empty_remains_rejected (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason/empty_remains_rejected","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason/non_empty_remains_accepted"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason/non_empty_remains_accepted","Output":"=== RUN TestDetectOpenAIPassthroughInstructionsRejectReason/non_empty_remains_accepted\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason/non_empty_remains_accepted","Output":"--- PASS: TestDetectOpenAIPassthroughInstructionsRejectReason/non_empty_remains_accepted (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason/non_empty_remains_accepted","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason","Output":"--- PASS: TestDetectOpenAIPassthroughInstructionsRejectReason (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStartOpenAISSEKeepalive_WorksWithoutCompactMarker"}
- {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStartOpenAISSEKeepalive_WorksWithoutCompactMarker","Output":"=== RUN TestStartOpenAISSEKeepalive_WorksWithoutCompactMarker\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStartOpenAISSEKeepalive_WorksWithoutCompactMarker","Output":"--- PASS: TestStartOpenAISSEKeepalive_WorksWithoutCompactMarker (0.40s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStartOpenAISSEKeepalive_WorksWithoutCompactMarker","Elapsed":0.4}
- {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind"}
- {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind","Output":"=== RUN TestClassifyOpenAIPreviousResponseIDKind\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/empty"}
- {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/empty","Output":"=== RUN TestClassifyOpenAIPreviousResponseIDKind/empty\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/empty","Output":"--- PASS: TestClassifyOpenAIPreviousResponseIDKind/empty (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/empty","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/response_id"}
- {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/response_id","Output":"=== RUN TestClassifyOpenAIPreviousResponseIDKind/response_id\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/response_id","Output":"--- PASS: TestClassifyOpenAIPreviousResponseIDKind/response_id (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/response_id","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/message_id"}
- {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/message_id","Output":"=== RUN TestClassifyOpenAIPreviousResponseIDKind/message_id\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/message_id","Output":"--- PASS: TestClassifyOpenAIPreviousResponseIDKind/message_id (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/message_id","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/item_id"}
- {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/item_id","Output":"=== RUN TestClassifyOpenAIPreviousResponseIDKind/item_id\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/item_id","Output":"--- PASS: TestClassifyOpenAIPreviousResponseIDKind/item_id (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/item_id","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/unknown"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/unknown","Output":"=== RUN TestClassifyOpenAIPreviousResponseIDKind/unknown\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/unknown","Output":"--- PASS: TestClassifyOpenAIPreviousResponseIDKind/unknown (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/unknown","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind","Output":"--- PASS: TestClassifyOpenAIPreviousResponseIDKind (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIPreviousResponseIDLikelyMessageID"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIPreviousResponseIDLikelyMessageID","Output":"=== RUN TestIsOpenAIPreviousResponseIDLikelyMessageID\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIPreviousResponseIDLikelyMessageID","Output":"--- PASS: TestIsOpenAIPreviousResponseIDLikelyMessageID (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIPreviousResponseIDLikelyMessageID","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUsagePricingAt"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUsagePricingAt","Output":"=== RUN TestOpenAIUsagePricingAt\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUsagePricingAt","Output":"--- PASS: TestOpenAIUsagePricingAt (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUsagePricingAt","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlStickyBindingOccursOnlyAfterTerminalAdmission"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlStickyBindingOccursOnlyAfterTerminalAdmission","Output":"=== RUN TestOpenAIProfitControlStickyBindingOccursOnlyAfterTerminalAdmission\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlStickyBindingOccursOnlyAfterTerminalAdmission","Output":"--- PASS: TestOpenAIProfitControlStickyBindingOccursOnlyAfterTerminalAdmission (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlStickyBindingOccursOnlyAfterTerminalAdmission","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlAfterAdmissionBindEagerWithoutGate"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlAfterAdmissionBindEagerWithoutGate","Output":"=== RUN TestOpenAIProfitControlAfterAdmissionBindEagerWithoutGate\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlAfterAdmissionBindEagerWithoutGate","Output":"--- PASS: TestOpenAIProfitControlAfterAdmissionBindEagerWithoutGate (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlAfterAdmissionBindEagerWithoutGate","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate","Output":"=== RUN TestResolveOpenAIProfitControlGate\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/nil_group_id_yields_no_gate"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/nil_group_id_yields_no_gate","Output":"=== RUN TestResolveOpenAIProfitControlGate/nil_group_id_yields_no_gate\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/nil_group_id_yields_no_gate","Output":"--- PASS: TestResolveOpenAIProfitControlGate/nil_group_id_yields_no_gate (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/nil_group_id_yields_no_gate","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/no_ctx_group_and_no_snapshot_yields_no_gate"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/no_ctx_group_and_no_snapshot_yields_no_gate","Output":"=== RUN TestResolveOpenAIProfitControlGate/no_ctx_group_and_no_snapshot_yields_no_gate\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/no_ctx_group_and_no_snapshot_yields_no_gate","Output":"--- PASS: TestResolveOpenAIProfitControlGate/no_ctx_group_and_no_snapshot_yields_no_gate (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/no_ctx_group_and_no_snapshot_yields_no_gate","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/disabled_group_yields_no_gate"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/disabled_group_yields_no_gate","Output":"=== RUN TestResolveOpenAIProfitControlGate/disabled_group_yields_no_gate\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/disabled_group_yields_no_gate","Output":"--- PASS: TestResolveOpenAIProfitControlGate/disabled_group_yields_no_gate (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/disabled_group_yields_no_gate","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/non_openai_or_grok_platform_yields_no_gate_even_if_enabled"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/non_openai_or_grok_platform_yields_no_gate_even_if_enabled","Output":"=== RUN TestResolveOpenAIProfitControlGate/non_openai_or_grok_platform_yields_no_gate_even_if_enabled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/non_openai_or_grok_platform_yields_no_gate_even_if_enabled","Output":"--- PASS: TestResolveOpenAIProfitControlGate/non_openai_or_grok_platform_yields_no_gate_even_if_enabled (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/non_openai_or_grok_platform_yields_no_gate_even_if_enabled","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/grok_group_routed_through_openai_handler_installs_gate"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/grok_group_routed_through_openai_handler_installs_gate","Output":"=== RUN TestResolveOpenAIProfitControlGate/grok_group_routed_through_openai_handler_installs_gate\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/grok_group_routed_through_openai_handler_installs_gate","Output":"--- PASS: TestResolveOpenAIProfitControlGate/grok_group_routed_through_openai_handler_installs_gate (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/grok_group_routed_through_openai_handler_installs_gate","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/ctx_group_id_mismatch_without_snapshot_yields_no_gate"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/ctx_group_id_mismatch_without_snapshot_yields_no_gate","Output":"=== RUN TestResolveOpenAIProfitControlGate/ctx_group_id_mismatch_without_snapshot_yields_no_gate\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/ctx_group_id_mismatch_without_snapshot_yields_no_gate","Output":"--- PASS: TestResolveOpenAIProfitControlGate/ctx_group_id_mismatch_without_snapshot_yields_no_gate (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/ctx_group_id_mismatch_without_snapshot_yields_no_gate","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/threshold_composes_margin_and_buffer_from_downstream_rate"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/threshold_composes_margin_and_buffer_from_downstream_rate","Output":"=== RUN TestResolveOpenAIProfitControlGate/threshold_composes_margin_and_buffer_from_downstream_rate\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/threshold_composes_margin_and_buffer_from_downstream_rate","Output":"--- PASS: TestResolveOpenAIProfitControlGate/threshold_composes_margin_and_buffer_from_downstream_rate (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/threshold_composes_margin_and_buffer_from_downstream_rate","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/threshold_applies_peak_factor_exactly_like_billing"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/threshold_applies_peak_factor_exactly_like_billing","Output":"=== RUN TestResolveOpenAIProfitControlGate/threshold_applies_peak_factor_exactly_like_billing\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/threshold_applies_peak_factor_exactly_like_billing","Output":"--- PASS: TestResolveOpenAIProfitControlGate/threshold_applies_peak_factor_exactly_like_billing (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/threshold_applies_peak_factor_exactly_like_billing","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate","Output":"--- PASS: TestResolveOpenAIProfitControlGate (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason","Output":"=== RUN TestOpenAIProfitControlVetoReason\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/no_gate_admits_everything"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/no_gate_admits_everything","Output":"=== RUN TestOpenAIProfitControlVetoReason/no_gate_admits_everything\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/no_gate_admits_everything","Output":"--- PASS: TestOpenAIProfitControlVetoReason/no_gate_admits_everything (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/no_gate_admits_everything","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/fresh_rate_below_threshold_admits"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/fresh_rate_below_threshold_admits","Output":"=== RUN TestOpenAIProfitControlVetoReason/fresh_rate_below_threshold_admits\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/fresh_rate_below_threshold_admits","Output":"--- PASS: TestOpenAIProfitControlVetoReason/fresh_rate_below_threshold_admits (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/fresh_rate_below_threshold_admits","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/rate_exactly_at_threshold_admits_via_epsilon"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/rate_exactly_at_threshold_admits_via_epsilon","Output":"=== RUN TestOpenAIProfitControlVetoReason/rate_exactly_at_threshold_admits_via_epsilon\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/rate_exactly_at_threshold_admits_via_epsilon","Output":"--- PASS: TestOpenAIProfitControlVetoReason/rate_exactly_at_threshold_admits_via_epsilon (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/rate_exactly_at_threshold_admits_via_epsilon","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/rate_within_float_noise_above_threshold_admits"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/rate_within_float_noise_above_threshold_admits","Output":"=== RUN TestOpenAIProfitControlVetoReason/rate_within_float_noise_above_threshold_admits\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/rate_within_float_noise_above_threshold_admits","Output":"--- PASS: TestOpenAIProfitControlVetoReason/rate_within_float_noise_above_threshold_admits (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/rate_within_float_noise_above_threshold_admits","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/rate_above_threshold_is_vetoed"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/rate_above_threshold_is_vetoed","Output":"=== RUN TestOpenAIProfitControlVetoReason/rate_above_threshold_is_vetoed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/rate_above_threshold_is_vetoed","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.612Z\",\"logger\":\"slog\",\"msg\":\"profit_control_activity\",\"service\":\"sub2api\",\"env\":\"test\",\"group_id\":0,\"platform\":\"\",\"threshold\":0.7,\"installs_total\":0,\"veto_threshold_total\":1,\"veto_invalid_account_rate_total\":0,\"refresh_failure_total\":0}\n"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/rate_above_threshold_is_vetoed","Output":"--- PASS: TestOpenAIProfitControlVetoReason/rate_above_threshold_is_vetoed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/rate_above_threshold_is_vetoed","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/zero_threshold_only_admits_free_upstream"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/zero_threshold_only_admits_free_upstream","Output":"=== RUN TestOpenAIProfitControlVetoReason/zero_threshold_only_admits_free_upstream\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/zero_threshold_only_admits_free_upstream","Output":"--- PASS: TestOpenAIProfitControlVetoReason/zero_threshold_only_admits_free_upstream (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/zero_threshold_only_admits_free_upstream","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/missing_account_rate_is_invalid"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/missing_account_rate_is_invalid","Output":"=== RUN TestOpenAIProfitControlVetoReason/missing_account_rate_is_invalid\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/missing_account_rate_is_invalid","Output":"--- PASS: TestOpenAIProfitControlVetoReason/missing_account_rate_is_invalid (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/missing_account_rate_is_invalid","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/oauth_account_with_manual_rate_is_priceable"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/oauth_account_with_manual_rate_is_priceable","Output":"=== RUN TestOpenAIProfitControlVetoReason/oauth_account_with_manual_rate_is_priceable\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/oauth_account_with_manual_rate_is_priceable","Output":"--- PASS: TestOpenAIProfitControlVetoReason/oauth_account_with_manual_rate_is_priceable (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/oauth_account_with_manual_rate_is_priceable","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/stale_probe_does_not_affect_manual_account_rate"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/stale_probe_does_not_affect_manual_account_rate","Output":"=== RUN TestOpenAIProfitControlVetoReason/stale_probe_does_not_affect_manual_account_rate\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/stale_probe_does_not_affect_manual_account_rate","Output":"--- PASS: TestOpenAIProfitControlVetoReason/stale_probe_does_not_affect_manual_account_rate (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/stale_probe_does_not_affect_manual_account_rate","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/negative_and_non-finite_rates_are_invalid"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/negative_and_non-finite_rates_are_invalid","Output":"=== RUN TestOpenAIProfitControlVetoReason/negative_and_non-finite_rates_are_invalid\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/negative_and_non-finite_rates_are_invalid","Output":"--- PASS: TestOpenAIProfitControlVetoReason/negative_and_non-finite_rates_are_invalid (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/negative_and_non-finite_rates_are_invalid","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason","Output":"--- PASS: TestOpenAIProfitControlVetoReason (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitThresholdTTLAndSuccessReset"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitThresholdTTLAndSuccessReset","Output":"=== RUN TestOpenAIProxyStreamCircuitThresholdTTLAndSuccessReset\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitThresholdTTLAndSuccessReset","Output":"--- PASS: TestOpenAIProxyStreamCircuitThresholdTTLAndSuccessReset (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitThresholdTTLAndSuccessReset","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitCollapsesBurstFailures"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitCollapsesBurstFailures","Output":"=== RUN TestOpenAIProxyStreamCircuitCollapsesBurstFailures\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitCollapsesBurstFailures","Output":"--- PASS: TestOpenAIProxyStreamCircuitCollapsesBurstFailures (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitCollapsesBurstFailures","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitDisabled"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitDisabled","Output":"=== RUN TestOpenAIProxyStreamCircuitDisabled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitDisabled","Output":"--- PASS: TestOpenAIProxyStreamCircuitDisabled (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitDisabled","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitActiveBlockCount"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitActiveBlockCount","Output":"=== RUN TestOpenAIProxyStreamCircuitActiveBlockCount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitActiveBlockCount","Output":"--- PASS: TestOpenAIProxyStreamCircuitActiveBlockCount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitActiveBlockCount","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamQuarantineBypassContext"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamQuarantineBypassContext","Output":"=== RUN TestOpenAIProxyStreamQuarantineBypassContext\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamQuarantineBypassContext","Output":"--- PASS: TestOpenAIProxyStreamQuarantineBypassContext (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamQuarantineBypassContext","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitBoundsEntries"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitBoundsEntries","Output":"=== RUN TestOpenAIProxyStreamCircuitBoundsEntries\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitBoundsEntries","Output":"--- PASS: TestOpenAIProxyStreamCircuitBoundsEntries (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitBoundsEntries","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAutoResetCreditExtra"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAutoResetCreditExtra","Output":"=== RUN TestNormalizeOpenAIAutoResetCreditExtra\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAutoResetCreditExtra/历史账号默认关闭"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAutoResetCreditExtra/历史账号默认关闭","Output":"=== RUN TestNormalizeOpenAIAutoResetCreditExtra/历史账号默认关闭\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAutoResetCreditExtra/历史账号默认关闭","Output":"--- PASS: TestNormalizeOpenAIAutoResetCreditExtra/历史账号默认关闭 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAutoResetCreditExtra/历史账号默认关闭","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAutoResetCreditExtra/开启时补齐两个百分百阈值并剥离运行态"}
- {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAutoResetCreditExtra/开启时补齐两个百分百阈值并剥离运行态","Output":"=== RUN TestNormalizeOpenAIAutoResetCreditExtra/开启时补齐两个百分百阈值并剥离运行态\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAutoResetCreditExtra/开启时补齐两个百分百阈值并剥离运行态","Output":"--- PASS: TestNormalizeOpenAIAutoResetCreditExtra/开启时补齐两个百分百阈值并剥离运行态 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAutoResetCreditExtra/开启时补齐两个百分百阈值并剥离运行态","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAutoResetCreditExtra/阈值和账号类型严格校验"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAutoResetCreditExtra/阈值和账号类型严格校验","Output":"=== RUN TestNormalizeOpenAIAutoResetCreditExtra/阈值和账号类型严格校验\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAutoResetCreditExtra/阈值和账号类型严格校验","Output":"--- PASS: TestNormalizeOpenAIAutoResetCreditExtra/阈值和账号类型严格校验 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAutoResetCreditExtra/阈值和账号类型严格校验","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAutoResetCreditExtra","Output":"--- PASS: TestNormalizeOpenAIAutoResetCreditExtra (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAutoResetCreditExtra","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates","Output":"=== RUN TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/卡状态未知时暂停并触发异步查询"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/卡状态未知时暂停并触发异步查询","Output":"=== RUN TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/卡状态未知时暂停并触发异步查询\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/卡状态未知时暂停并触发异步查询","Output":"--- PASS: TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/卡状态未知时暂停并触发异步查询 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/卡状态未知时暂停并触发异步查询","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/明确有卡时允许继续到用卡阈值"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/明确有卡时允许继续到用卡阈值","Output":"=== RUN TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/明确有卡时允许继续到用卡阈值\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/明确有卡时允许继续到用卡阈值","Output":"--- PASS: TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/明确有卡时允许继续到用卡阈值 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/明确有卡时允许继续到用卡阈值","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/达到用卡阈值后即使有卡也退出调度"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/达到用卡阈值后即使有卡也退出调度","Output":"=== RUN TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/达到用卡阈值后即使有卡也退出调度\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/达到用卡阈值后即使有卡也退出调度","Output":"--- PASS: TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/达到用卡阈值后即使有卡也退出调度 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/达到用卡阈值后即使有卡也退出调度","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/自然窗口重置后清除动态阻塞"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/自然窗口重置后清除动态阻塞","Output":"=== RUN TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/自然窗口重置后清除动态阻塞\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/自然窗口重置后清除动态阻塞","Output":"--- PASS: TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/自然窗口重置后清除动态阻塞 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/自然窗口重置后清除动态阻塞","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates","Output":"--- PASS: TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSelectOpenAIAutoResetCandidate_FailsClosed"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSelectOpenAIAutoResetCandidate_FailsClosed","Output":"=== RUN TestSelectOpenAIAutoResetCandidate_FailsClosed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSelectOpenAIAutoResetCandidate_FailsClosed","Output":"--- PASS: TestSelectOpenAIAutoResetCandidate_FailsClosed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSelectOpenAIAutoResetCandidate_FailsClosed","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_AssessesIndependentWindows"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_AssessesIndependentWindows","Output":"=== RUN TestOpenAIQuotaAutoResetService_AssessesIndependentWindows\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_AssessesIndependentWindows/5h"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_AssessesIndependentWindows/5h","Output":"=== RUN TestOpenAIQuotaAutoResetService_AssessesIndependentWindows/5h\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_AssessesIndependentWindows/5h","Output":"--- PASS: TestOpenAIQuotaAutoResetService_AssessesIndependentWindows/5h (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_AssessesIndependentWindows/5h","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_AssessesIndependentWindows/7d"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_AssessesIndependentWindows/7d","Output":"=== RUN TestOpenAIQuotaAutoResetService_AssessesIndependentWindows/7d\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_AssessesIndependentWindows/7d","Output":"--- PASS: TestOpenAIQuotaAutoResetService_AssessesIndependentWindows/7d (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_AssessesIndependentWindows/7d","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_AssessesIndependentWindows/同时触发"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_AssessesIndependentWindows/同时触发","Output":"=== RUN TestOpenAIQuotaAutoResetService_AssessesIndependentWindows/同时触发\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_AssessesIndependentWindows/同时触发","Output":"--- PASS: TestOpenAIQuotaAutoResetService_AssessesIndependentWindows/同时触发 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_AssessesIndependentWindows/同时触发","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_AssessesIndependentWindows","Output":"--- PASS: TestOpenAIQuotaAutoResetService_AssessesIndependentWindows (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_AssessesIndependentWindows","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_ConcurrentInstancesConsumeOnce"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_ConcurrentInstancesConsumeOnce","Output":"=== RUN TestOpenAIQuotaAutoResetService_ConcurrentInstancesConsumeOnce\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_ConcurrentInstancesConsumeOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.613Z\",\"msg\":\"[IdempotencyMetric] name=idempotency_claim_total endpoint=/system/openai/reset-credit/auto scope=openai_auto_reset_credit value=1 mode=new_claim\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.idempotency\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_ConcurrentInstancesConsumeOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.613Z\",\"msg\":\"[IdempotencyAudit] endpoint=/system/openai/reset-credit/auto scope=openai_auto_reset_credit key_hash=2093fa86e74c68a788c4d4de817b5fb4ea66e587c60cb6070cd3ade8431d5faf state_transition=none-\u003eprocessing replayed=false claim_mode=new\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.idempotency\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_ConcurrentInstancesConsumeOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.613Z\",\"msg\":\"[IdempotencyMetric] name=idempotency_conflict_total endpoint=/system/openai/reset-credit/auto scope=openai_auto_reset_credit value=1 reason=in_progress\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.idempotency\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_ConcurrentInstancesConsumeOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.613Z\",\"msg\":\"[IdempotencyAudit] endpoint=/system/openai/reset-credit/auto scope=openai_auto_reset_credit key_hash=2093fa86e74c68a788c4d4de817b5fb4ea66e587c60cb6070cd3ade8431d5faf state_transition=processing-\u003econflict replayed=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.idempotency\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.6653189+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_ConcurrentInstancesConsumeOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.665Z\",\"msg\":\"[IdempotencyAudit] endpoint=/system/openai/reset-credit/auto scope=openai_auto_reset_credit key_hash=2093fa86e74c68a788c4d4de817b5fb4ea66e587c60cb6070cd3ade8431d5faf state_transition=processing-\u003esucceeded replayed=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.idempotency\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.6653189+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_ConcurrentInstancesConsumeOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.665Z\",\"msg\":\"[IdempotencyMetric] name=idempotency_processing_duration_ms endpoint=/system/openai/reset-credit/auto scope=openai_auto_reset_credit value=51.372\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.idempotency\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.6653189+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_ConcurrentInstancesConsumeOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.665Z\",\"logger\":\"slog\",\"msg\":\"openai_auto_reset_credit_success\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":99,\"trigger_window\":\"5h\",\"threshold_5h\":1,\"threshold_7d\":1,\"utilization_5h\":1,\"utilization_7d\":0.1,\"windows_reset\":2}\n"}
- {"Time":"2026-09-12T11:38:48.6653189+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_ConcurrentInstancesConsumeOnce","Output":"--- PASS: TestOpenAIQuotaAutoResetService_ConcurrentInstancesConsumeOnce (0.05s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6653189+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_ConcurrentInstancesConsumeOnce","Elapsed":0.05}
- {"Time":"2026-09-12T11:38:48.6653189+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_TimeoutRetryReusesRequestBody"}
- {"Time":"2026-09-12T11:38:48.6653189+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_TimeoutRetryReusesRequestBody","Output":"=== RUN TestOpenAIQuotaAutoResetService_TimeoutRetryReusesRequestBody\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6653189+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_TimeoutRetryReusesRequestBody","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.665Z\",\"msg\":\"[IdempotencyMetric] name=idempotency_claim_total endpoint=/system/openai/reset-credit/auto scope=openai_auto_reset_credit value=1 mode=new_claim\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.idempotency\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.6653189+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_TimeoutRetryReusesRequestBody","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.665Z\",\"msg\":\"[IdempotencyAudit] endpoint=/system/openai/reset-credit/auto scope=openai_auto_reset_credit key_hash=d8c9b3a2b2e993b238ce7600acb9a4e8b23c1c53384797d3dd60ff5316f09ff3 state_transition=none-\u003eprocessing replayed=false claim_mode=new\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.idempotency\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.6653189+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_TimeoutRetryReusesRequestBody","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.665Z\",\"msg\":\"[IdempotencyMetric] name=idempotency_retry_backoff_total endpoint=/system/openai/reset-credit/auto scope=openai_auto_reset_credit value=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.idempotency\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.6663158+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_TimeoutRetryReusesRequestBody","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.665Z\",\"msg\":\"[IdempotencyAudit] endpoint=/system/openai/reset-credit/auto scope=openai_auto_reset_credit key_hash=d8c9b3a2b2e993b238ce7600acb9a4e8b23c1c53384797d3dd60ff5316f09ff3 state_transition=processing-\u003efailed_retryable replayed=false reason=EXECUTION_FAILED\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.idempotency\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_TimeoutRetryReusesRequestBody","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.665Z\",\"msg\":\"[IdempotencyMetric] name=idempotency_processing_duration_ms endpoint=/system/openai/reset-credit/auto scope=openai_auto_reset_credit value=0.000\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.idempotency\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_TimeoutRetryReusesRequestBody","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:48.665Z\",\"logger\":\"slog\",\"msg\":\"openai_auto_reset_credit_failed\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":100,\"trigger_window\":\"5h\",\"available_count\":1,\"error_code\":\"OPENAI_AUTO_RESET_FAILED\"}\n"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_TimeoutRetryReusesRequestBody","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.665Z\",\"msg\":\"[IdempotencyMetric] name=idempotency_claim_total endpoint=/system/openai/reset-credit/auto scope=openai_auto_reset_credit value=1 mode=reclaim\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.idempotency\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_TimeoutRetryReusesRequestBody","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.665Z\",\"msg\":\"[IdempotencyAudit] endpoint=/system/openai/reset-credit/auto scope=openai_auto_reset_credit key_hash=d8c9b3a2b2e993b238ce7600acb9a4e8b23c1c53384797d3dd60ff5316f09ff3 state_transition=failed_retryable-\u003eprocessing replayed=false claim_mode=reclaim\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.idempotency\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_TimeoutRetryReusesRequestBody","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.665Z\",\"msg\":\"[IdempotencyAudit] endpoint=/system/openai/reset-credit/auto scope=openai_auto_reset_credit key_hash=d8c9b3a2b2e993b238ce7600acb9a4e8b23c1c53384797d3dd60ff5316f09ff3 state_transition=processing-\u003esucceeded replayed=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.idempotency\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_TimeoutRetryReusesRequestBody","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.665Z\",\"msg\":\"[IdempotencyMetric] name=idempotency_processing_duration_ms endpoint=/system/openai/reset-credit/auto scope=openai_auto_reset_credit value=0.000\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.idempotency\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_TimeoutRetryReusesRequestBody","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.666Z\",\"logger\":\"slog\",\"msg\":\"openai_auto_reset_credit_success\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":100,\"trigger_window\":\"5h\",\"threshold_5h\":1,\"threshold_7d\":1,\"utilization_5h\":1,\"utilization_7d\":0,\"windows_reset\":2}\n"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_TimeoutRetryReusesRequestBody","Output":"--- PASS: TestOpenAIQuotaAutoResetService_TimeoutRetryReusesRequestBody (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_TimeoutRetryReusesRequestBody","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_PreservesAvailableCreditOrder"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_PreservesAvailableCreditOrder","Output":"=== RUN TestParseOpenAIRateLimitResetCreditDetails_PreservesAvailableCreditOrder\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_PreservesAvailableCreditOrder","Output":"--- PASS: TestParseOpenAIRateLimitResetCreditDetails_PreservesAvailableCreditOrder (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_PreservesAvailableCreditOrder","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_ContainsCodexKeys"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_ContainsCodexKeys","Output":"=== RUN TestBuildCodexSparkWindowExtraUpdates_ContainsCodexKeys\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_ContainsCodexKeys","Output":"--- PASS: TestBuildCodexSparkWindowExtraUpdates_ContainsCodexKeys (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_ContainsCodexKeys","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_NilUsage"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_NilUsage","Output":"=== RUN TestBuildCodexSparkWindowExtraUpdates_NilUsage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_NilUsage","Output":"--- PASS: TestBuildCodexSparkWindowExtraUpdates_NilUsage (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_NilUsage","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_NoBengalfox"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_NoBengalfox","Output":"=== RUN TestBuildCodexSparkWindowExtraUpdates_NoBengalfox\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_NoBengalfox","Output":"--- PASS: TestBuildCodexSparkWindowExtraUpdates_NoBengalfox (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_NoBengalfox","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers","Output":"=== RUN TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/credits"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/credits","Output":"=== RUN TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/credits\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/credits","Output":"--- PASS: TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/credits (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/credits","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/rate_limit_reset_credits"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/rate_limit_reset_credits","Output":"=== RUN TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/rate_limit_reset_credits\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/rate_limit_reset_credits","Output":"--- PASS: TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/rate_limit_reset_credits (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/rate_limit_reset_credits","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/items"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/items","Output":"=== RUN TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/items\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/items","Output":"--- PASS: TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/items (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/items","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/data"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/data","Output":"=== RUN TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/data\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/data","Output":"--- PASS: TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/data (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/data","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/array"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/array","Output":"=== RUN TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/array\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/array","Output":"--- PASS: TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/array (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/array","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers","Output":"--- PASS: TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates","Output":"=== RUN TestExtractOpenAIReasoningEffortFromBodyModelCandidates\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/后缀推导回退到原始模型(OAuth_上游模型已剥后缀)"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/后缀推导回退到原始模型(OAuth_上游模型已剥后缀)","Output":"=== RUN TestExtractOpenAIReasoningEffortFromBodyModelCandidates/后缀推导回退到原始模型(OAuth_上游模型已剥后缀)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/后缀推导回退到原始模型(OAuth_上游模型已剥后缀)","Output":"--- PASS: TestExtractOpenAIReasoningEffortFromBodyModelCandidates/后缀推导回退到原始模型(OAuth_上游模型已剥后缀) (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/后缀推导回退到原始模型(OAuth_上游模型已剥后缀)","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/GPT-5.6_后缀_max_经原始模型推导保留"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/GPT-5.6_后缀_max_经原始模型推导保留","Output":"=== RUN TestExtractOpenAIReasoningEffortFromBodyModelCandidates/GPT-5.6_后缀_max_经原始模型推导保留\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/GPT-5.6_后缀_max_经原始模型推导保留","Output":"--- PASS: TestExtractOpenAIReasoningEffortFromBodyModelCandidates/GPT-5.6_后缀_max_经原始模型推导保留 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/GPT-5.6_后缀_max_经原始模型推导保留","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/显式_max_用第一个非空候选(映射后模型)判定"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/显式_max_用第一个非空候选(映射后模型)判定","Output":"=== RUN TestExtractOpenAIReasoningEffortFromBodyModelCandidates/显式_max_用第一个非空候选(映射后模型)判定\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/显式_max_用第一个非空候选(映射后模型)判定","Output":"--- PASS: TestExtractOpenAIReasoningEffortFromBodyModelCandidates/显式_max_用第一个非空候选(映射后模型)判定 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/显式_max_用第一个非空候选(映射后模型)判定","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/显式_max_非_5.6_首候选仍折叠为_xhigh"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/显式_max_非_5.6_首候选仍折叠为_xhigh","Output":"=== RUN TestExtractOpenAIReasoningEffortFromBodyModelCandidates/显式_max_非_5.6_首候选仍折叠为_xhigh\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/显式_max_非_5.6_首候选仍折叠为_xhigh","Output":"--- PASS: TestExtractOpenAIReasoningEffortFromBodyModelCandidates/显式_max_非_5.6_首候选仍折叠为_xhigh (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/显式_max_非_5.6_首候选仍折叠为_xhigh","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/所有候选均无后缀时返回_nil"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/所有候选均无后缀时返回_nil","Output":"=== RUN TestExtractOpenAIReasoningEffortFromBodyModelCandidates/所有候选均无后缀时返回_nil\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/所有候选均无后缀时返回_nil","Output":"--- PASS: TestExtractOpenAIReasoningEffortFromBodyModelCandidates/所有候选均无后缀时返回_nil (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/所有候选均无后缀时返回_nil","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates","Output":"--- PASS: TestExtractOpenAIReasoningEffortFromBodyModelCandidates (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortModelCandidates"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortModelCandidates","Output":"=== RUN TestExtractOpenAIReasoningEffortModelCandidates\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortModelCandidates","Output":"--- PASS: TestExtractOpenAIReasoningEffortModelCandidates (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortModelCandidates","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardOAuthDerivesEffortFromSuffixModel"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardOAuthDerivesEffortFromSuffixModel","Output":"=== RUN TestOpenAIGatewayServiceForwardOAuthDerivesEffortFromSuffixModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardOAuthDerivesEffortFromSuffixModel","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.666Z\",\"msg\":\"[OpenAI] Upstream model resolved: gpt-5.3-codex-xhigh -\u003e gpt-5.3-codex (account: openai-oauth-suffix, type: oauth, isCodexCLI: false)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardOAuthDerivesEffortFromSuffixModel","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.667Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":11,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardOAuthDerivesEffortFromSuffixModel","Output":"--- PASS: TestOpenAIGatewayServiceForwardOAuthDerivesEffortFromSuffixModel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardOAuthDerivesEffortFromSuffixModel","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIReasoningEffortPolicyContext"}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIReasoningEffortPolicyContext","Output":"=== RUN TestOpenAIReasoningEffortPolicyContext\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIReasoningEffortPolicyContext","Output":"--- PASS: TestOpenAIReasoningEffortPolicyContext (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIReasoningEffortPolicyContext","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy"}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/nested_caps_high"}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/nested_caps_high","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/nested_caps_high\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/nested_caps_high","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/nested_caps_high (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/nested_caps_high","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/flat_caps_high"}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/flat_caps_high","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/flat_caps_high\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/flat_caps_high","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/flat_caps_high (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/flat_caps_high","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/Anthropic_output_config_caps_max"}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/Anthropic_output_config_caps_max","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/Anthropic_output_config_caps_max\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/Anthropic_output_config_caps_max","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/Anthropic_output_config_caps_max (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/Anthropic_output_config_caps_max","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/Anthropic_output_config_maps_before_cap"}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/Anthropic_output_config_maps_before_cap","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/Anthropic_output_config_maps_before_cap\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/Anthropic_output_config_maps_before_cap","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/Anthropic_output_config_maps_before_cap (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/Anthropic_output_config_maps_before_cap","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/does_not_raise_omitted"}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/does_not_raise_omitted","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/does_not_raise_omitted\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/does_not_raise_omitted","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/does_not_raise_omitted (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/does_not_raise_omitted","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_lower_value"}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_lower_value","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/keeps_lower_value\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_lower_value","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/keeps_lower_value (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_lower_value","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/normalizes_request_alias"}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/normalizes_request_alias","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/normalizes_request_alias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/normalizes_request_alias","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/normalizes_request_alias (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/normalizes_request_alias","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/caps_max_below_its_distinct_rank"}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/caps_max_below_its_distinct_rank","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/caps_max_below_its_distinct_rank\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/caps_max_below_its_distinct_rank","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/caps_max_below_its_distinct_rank (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/caps_max_below_its_distinct_rank","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_xhigh_below_max"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_xhigh_below_max","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/keeps_xhigh_below_max\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_xhigh_below_max","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/keeps_xhigh_below_max (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_xhigh_below_max","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/ignores_stale_none_ceiling"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/ignores_stale_none_ceiling","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/ignores_stale_none_ceiling\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/ignores_stale_none_ceiling","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/ignores_stale_none_ceiling (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/ignores_stale_none_ceiling","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/caps_both_shapes"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/caps_both_shapes","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/caps_both_shapes\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/caps_both_shapes","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/caps_both_shapes (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/caps_both_shapes","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/maps_before_cap"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/maps_before_cap","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/maps_before_cap\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/maps_before_cap","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/maps_before_cap (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/maps_before_cap","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/does_not_chain_mappings"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/does_not_chain_mappings","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/does_not_chain_mappings\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/does_not_chain_mappings","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/does_not_chain_mappings (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/does_not_chain_mappings","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/maps_nested_none"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/maps_nested_none","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/maps_nested_none\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/maps_nested_none","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/maps_nested_none (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/maps_nested_none","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/maps_flat_none"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/maps_flat_none","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/maps_flat_none\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/maps_flat_none","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/maps_flat_none (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/maps_flat_none","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/none_mapping_runs_before_cap"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/none_mapping_runs_before_cap","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/none_mapping_runs_before_cap\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/none_mapping_runs_before_cap","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/none_mapping_runs_before_cap (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/none_mapping_runs_before_cap","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_none_byte_for_byte_without_mappings"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_none_byte_for_byte_without_mappings","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/keeps_none_byte_for_byte_without_mappings\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_none_byte_for_byte_without_mappings","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/keeps_none_byte_for_byte_without_mappings (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_none_byte_for_byte_without_mappings","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_none_byte_for_byte_when_scope_does_not_match"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_none_byte_for_byte_when_scope_does_not_match","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/keeps_none_byte_for_byte_when_scope_does_not_match\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_none_byte_for_byte_when_scope_does_not_match","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/keeps_none_byte_for_byte_when_scope_does_not_match (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_none_byte_for_byte_when_scope_does_not_match","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/exact_scope_maps_none"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/exact_scope_maps_none","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/exact_scope_maps_none\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/exact_scope_maps_none","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/exact_scope_maps_none (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/exact_scope_maps_none","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/prefix_scope_maps_none"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/prefix_scope_maps_none","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/prefix_scope_maps_none\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/prefix_scope_maps_none","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/prefix_scope_maps_none (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/prefix_scope_maps_none","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/suffix_scope_maps_none"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/suffix_scope_maps_none","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/suffix_scope_maps_none\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/suffix_scope_maps_none","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/suffix_scope_maps_none (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/suffix_scope_maps_none","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/global_scope_maps_none"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/global_scope_maps_none","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/global_scope_maps_none\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/global_scope_maps_none","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/global_scope_maps_none (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/global_scope_maps_none","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_unknown_without_mapping"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_unknown_without_mapping","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/keeps_unknown_without_mapping\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_unknown_without_mapping","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/keeps_unknown_without_mapping (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_unknown_without_mapping","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_non_string_value"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_non_string_value","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/keeps_non_string_value\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_non_string_value","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/keeps_non_string_value (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_non_string_value","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/prefix_mapping_applies_to_matching_model"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/prefix_mapping_applies_to_matching_model","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/prefix_mapping_applies_to_matching_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/prefix_mapping_applies_to_matching_model","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/prefix_mapping_applies_to_matching_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/prefix_mapping_applies_to_matching_model","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/prefix_mapping_skips_non_matching_model"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/prefix_mapping_skips_non_matching_model","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/prefix_mapping_skips_non_matching_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/prefix_mapping_skips_non_matching_model","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/prefix_mapping_skips_non_matching_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/prefix_mapping_skips_non_matching_model","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/exact_mapping_beats_prefix"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/exact_mapping_beats_prefix","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/exact_mapping_beats_prefix\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/exact_mapping_beats_prefix","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/exact_mapping_beats_prefix (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/exact_mapping_beats_prefix","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/longer_prefix_beats_shorter_prefix"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/longer_prefix_beats_shorter_prefix","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/longer_prefix_beats_shorter_prefix\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/longer_prefix_beats_shorter_prefix","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/longer_prefix_beats_shorter_prefix (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/longer_prefix_beats_shorter_prefix","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/falls_back_to_global_mapping_when_no_model_scope_hits"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/falls_back_to_global_mapping_when_no_model_scope_hits","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/falls_back_to_global_mapping_when_no_model_scope_hits\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/falls_back_to_global_mapping_when_no_model_scope_hits","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/falls_back_to_global_mapping_when_no_model_scope_hits (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/falls_back_to_global_mapping_when_no_model_scope_hits","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/model_scoped_mapping_still_respects_ceiling"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/model_scoped_mapping_still_respects_ceiling","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/model_scoped_mapping_still_respects_ceiling\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/model_scoped_mapping_still_respects_ceiling","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/model_scoped_mapping_still_respects_ceiling (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/model_scoped_mapping_still_respects_ceiling","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/model_match_is_case_insensitive"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/model_match_is_case_insensitive","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/model_match_is_case_insensitive\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/model_match_is_case_insensitive","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/model_match_is_case_insensitive (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/model_match_is_case_insensitive","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/suffix_mapping_applies_to_matching_model"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/suffix_mapping_applies_to_matching_model","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/suffix_mapping_applies_to_matching_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/suffix_mapping_applies_to_matching_model","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/suffix_mapping_applies_to_matching_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/suffix_mapping_applies_to_matching_model","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/suffix_mapping_skips_non_matching_model"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/suffix_mapping_skips_non_matching_model","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/suffix_mapping_skips_non_matching_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/suffix_mapping_skips_non_matching_model","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/suffix_mapping_skips_non_matching_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/suffix_mapping_skips_non_matching_model","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/exact_mapping_beats_suffix"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/exact_mapping_beats_suffix","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/exact_mapping_beats_suffix\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/exact_mapping_beats_suffix","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/exact_mapping_beats_suffix (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/exact_mapping_beats_suffix","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/longer_suffix_beats_shorter_suffix"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/longer_suffix_beats_shorter_suffix","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/longer_suffix_beats_shorter_suffix\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/longer_suffix_beats_shorter_suffix","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/longer_suffix_beats_shorter_suffix (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/longer_suffix_beats_shorter_suffix","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/longer_affix_beats_the_other_affix"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/longer_affix_beats_the_other_affix","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/longer_affix_beats_the_other_affix\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/longer_affix_beats_the_other_affix","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/longer_affix_beats_the_other_affix (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/longer_affix_beats_the_other_affix","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/empty_type_and_model_apply_to_every_model"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/empty_type_and_model_apply_to_every_model","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/empty_type_and_model_apply_to_every_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/empty_type_and_model_apply_to_every_model","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/empty_type_and_model_apply_to_every_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/empty_type_and_model_apply_to_every_model","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/deny_rejects_over_ceiling"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/deny_rejects_over_ceiling","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/deny_rejects_over_ceiling\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/deny_rejects_over_ceiling","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/deny_rejects_over_ceiling (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6692965+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/deny_rejects_over_ceiling","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/deny_keeps_value_at_ceiling"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/deny_keeps_value_at_ceiling","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/deny_keeps_value_at_ceiling\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/deny_keeps_value_at_ceiling","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/deny_keeps_value_at_ceiling (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/deny_keeps_value_at_ceiling","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/deny_after_mapping_still_over_ceiling"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/deny_after_mapping_still_over_ceiling","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/deny_after_mapping_still_over_ceiling\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/deny_after_mapping_still_over_ceiling","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/deny_after_mapping_still_over_ceiling (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/deny_after_mapping_still_over_ceiling","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/deny_allows_mapping_under_ceiling"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/deny_allows_mapping_under_ceiling","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/deny_allows_mapping_under_ceiling\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/deny_allows_mapping_under_ceiling","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/deny_allows_mapping_under_ceiling (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/deny_allows_mapping_under_ceiling","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/deny_ignored_without_ceiling"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/deny_ignored_without_ceiling","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/deny_ignored_without_ceiling\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/deny_ignored_without_ceiling","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/deny_ignored_without_ceiling (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/deny_ignored_without_ceiling","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_matching_nested_effort"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_matching_nested_effort","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_matching_nested_effort\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_matching_nested_effort","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_matching_nested_effort (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_matching_nested_effort","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_matching_flat_effort"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_matching_flat_effort","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_matching_flat_effort\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_matching_flat_effort","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_matching_flat_effort (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_matching_flat_effort","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_Anthropic_output_config"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_Anthropic_output_config","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_Anthropic_output_config\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_Anthropic_output_config","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_Anthropic_output_config (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_Anthropic_output_config","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_none_source"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_none_source","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_none_source\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_none_source","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_none_source (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_none_source","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_respects_model_scope"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_respects_model_scope","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/mapping_deny_respects_model_scope\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_respects_model_scope","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/mapping_deny_respects_model_scope (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_respects_model_scope","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_skips_non_matching_model"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_skips_non_matching_model","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/mapping_deny_skips_non_matching_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_skips_non_matching_model","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/mapping_deny_skips_non_matching_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_skips_non_matching_model","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_leaves_other_efforts_unchanged"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_leaves_other_efforts_unchanged","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/mapping_deny_leaves_other_efforts_unchanged\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_leaves_other_efforts_unchanged","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/mapping_deny_leaves_other_efforts_unchanged (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_leaves_other_efforts_unchanged","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_takes_precedence_over_ceiling_rewrite"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_takes_precedence_over_ceiling_rewrite","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/mapping_deny_takes_precedence_over_ceiling_rewrite\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_takes_precedence_over_ceiling_rewrite","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/mapping_deny_takes_precedence_over_ceiling_rewrite (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_takes_precedence_over_ceiling_rewrite","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite","Output":"=== RUN TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite/native_responses"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite/native_responses","Output":"=== RUN TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite/native_responses\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite/native_responses","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.669Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":161,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite/native_responses","Output":"--- PASS: TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite/native_responses (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite/native_responses","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite/api_key_passthrough"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite/api_key_passthrough","Output":"=== RUN TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite/api_key_passthrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite/api_key_passthrough","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.669Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=161 name=api_key_passthrough type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite/api_key_passthrough","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.669Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":161,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.6704367+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite/api_key_passthrough","Output":"--- PASS: TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite/api_key_passthrough (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite/api_key_passthrough","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite","Output":"--- PASS: TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts"}
- {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts","Output":"=== RUN TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts/passthrough_false"}
- {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts/passthrough_false","Output":"=== RUN TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts/passthrough_false\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts/passthrough_false","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.670Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":162,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts/passthrough_false","Output":"--- PASS: TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts/passthrough_false (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts/passthrough_false","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts/passthrough_true"}
- {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts/passthrough_true","Output":"=== RUN TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts/passthrough_true\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts/passthrough_true","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.670Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=162 name= type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts/passthrough_true","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.670Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":162,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts/passthrough_true","Output":"--- PASS: TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts/passthrough_true (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts/passthrough_true","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts","Output":"--- PASS: TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressMessagesOnly"}
- {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressMessagesOnly","Output":"=== RUN TestNormalizeOpenAIResponsesLegacyIngressMessagesOnly\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressMessagesOnly","Output":"--- PASS: TestNormalizeOpenAIResponsesLegacyIngressMessagesOnly (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressMessagesOnly","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressConvertsChatTopLevelFields"}
- {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressConvertsChatTopLevelFields","Output":"=== RUN TestNormalizeOpenAIResponsesLegacyIngressConvertsChatTopLevelFields\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressConvertsChatTopLevelFields","Output":"--- PASS: TestNormalizeOpenAIResponsesLegacyIngressConvertsChatTopLevelFields (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressConvertsChatTopLevelFields","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressNativeInputRemainsAuthoritative"}
- {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressNativeInputRemainsAuthoritative","Output":"=== RUN TestNormalizeOpenAIResponsesLegacyIngressNativeInputRemainsAuthoritative\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressNativeInputRemainsAuthoritative","Output":"--- PASS: TestNormalizeOpenAIResponsesLegacyIngressNativeInputRemainsAuthoritative (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressNativeInputRemainsAuthoritative","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressKeepsPromptAliasAndDropsCommands"}
- {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressKeepsPromptAliasAndDropsCommands","Output":"=== RUN TestNormalizeOpenAIResponsesLegacyIngressKeepsPromptAliasAndDropsCommands\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressKeepsPromptAliasAndDropsCommands","Output":"--- PASS: TestNormalizeOpenAIResponsesLegacyIngressKeepsPromptAliasAndDropsCommands (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressKeepsPromptAliasAndDropsCommands","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressPreservesNativePromptTemplate"}
- {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressPreservesNativePromptTemplate","Output":"=== RUN TestNormalizeOpenAIResponsesLegacyIngressPreservesNativePromptTemplate\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressPreservesNativePromptTemplate","Output":"--- PASS: TestNormalizeOpenAIResponsesLegacyIngressPreservesNativePromptTemplate (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressPreservesNativePromptTemplate","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressPreservesUnknownPromptShapeWhileDroppingCommands"}
- {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressPreservesUnknownPromptShapeWhileDroppingCommands","Output":"=== RUN TestNormalizeOpenAIResponsesLegacyIngressPreservesUnknownPromptShapeWhileDroppingCommands\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressPreservesUnknownPromptShapeWhileDroppingCommands","Output":"--- PASS: TestNormalizeOpenAIResponsesLegacyIngressPreservesUnknownPromptShapeWhileDroppingCommands (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressPreservesUnknownPromptShapeWhileDroppingCommands","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs"}
- {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs","Output":"=== RUN TestSanitizeOpenAIResponsesOrphanToolOutputs\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs/named_standalone_inputs_do_not_legitimize_orphan_results"}
- {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs/named_standalone_inputs_do_not_legitimize_orphan_results","Output":"=== RUN TestSanitizeOpenAIResponsesOrphanToolOutputs/named_standalone_inputs_do_not_legitimize_orphan_results\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs/named_standalone_inputs_do_not_legitimize_orphan_results","Output":"--- PASS: TestSanitizeOpenAIResponsesOrphanToolOutputs/named_standalone_inputs_do_not_legitimize_orphan_results (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs/named_standalone_inputs_do_not_legitimize_orphan_results","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs/preserves_matches_regardless_of_item_order"}
- {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs/preserves_matches_regardless_of_item_order","Output":"=== RUN TestSanitizeOpenAIResponsesOrphanToolOutputs/preserves_matches_regardless_of_item_order\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs/preserves_matches_regardless_of_item_order","Output":"--- PASS: TestSanitizeOpenAIResponsesOrphanToolOutputs/preserves_matches_regardless_of_item_order (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs/preserves_matches_regardless_of_item_order","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs/outputs_do_not_legitimize_each_other"}
- {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs/outputs_do_not_legitimize_each_other","Output":"=== RUN TestSanitizeOpenAIResponsesOrphanToolOutputs/outputs_do_not_legitimize_each_other\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs/outputs_do_not_legitimize_each_other","Output":"--- PASS: TestSanitizeOpenAIResponsesOrphanToolOutputs/outputs_do_not_legitimize_each_other (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs/outputs_do_not_legitimize_each_other","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs/preserves_all_output_variants_with_matching_calls"}
- {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs/preserves_all_output_variants_with_matching_calls","Output":"=== RUN TestSanitizeOpenAIResponsesOrphanToolOutputs/preserves_all_output_variants_with_matching_calls\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs/preserves_all_output_variants_with_matching_calls","Output":"--- PASS: TestSanitizeOpenAIResponsesOrphanToolOutputs/preserves_all_output_variants_with_matching_calls (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs/preserves_all_output_variants_with_matching_calls","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs/previous_response_may_contain_the_missing_call"}
- {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs/previous_response_may_contain_the_missing_call","Output":"=== RUN TestSanitizeOpenAIResponsesOrphanToolOutputs/previous_response_may_contain_the_missing_call\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs/previous_response_may_contain_the_missing_call","Output":"--- PASS: TestSanitizeOpenAIResponsesOrphanToolOutputs/previous_response_may_contain_the_missing_call (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs/previous_response_may_contain_the_missing_call","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs","Output":"--- PASS: TestSanitizeOpenAIResponsesOrphanToolOutputs (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputTextIsNeverSilentlyTruncated"}
- {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputTextIsNeverSilentlyTruncated","Output":"=== RUN TestOpenAIResponsesInputTextIsNeverSilentlyTruncated\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.689626+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputTextIsNeverSilentlyTruncated","Output":"--- PASS: TestOpenAIResponsesInputTextIsNeverSilentlyTruncated (0.02s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.689626+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputTextIsNeverSilentlyTruncated","Elapsed":0.02}
- {"Time":"2026-09-12T11:38:48.689626+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputNeverRequestsPreemptiveTruncation"}
- {"Time":"2026-09-12T11:38:48.689626+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputNeverRequestsPreemptiveTruncation","Output":"=== RUN TestOpenAIResponsesInputNeverRequestsPreemptiveTruncation\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6938985+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputNeverRequestsPreemptiveTruncation","Output":"--- PASS: TestOpenAIResponsesInputNeverRequestsPreemptiveTruncation (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6938985+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputNeverRequestsPreemptiveTruncation","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6938985+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthDropsOrphanAfterDroppingPreviousResponse"}
- {"Time":"2026-09-12T11:38:48.6938985+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthDropsOrphanAfterDroppingPreviousResponse","Output":"=== RUN TestOpenAIGatewayService_OAuthDropsOrphanAfterDroppingPreviousResponse\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6953977+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthDropsOrphanAfterDroppingPreviousResponse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.694Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5108,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:48.6953977+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthDropsOrphanAfterDroppingPreviousResponse","Output":"--- PASS: TestOpenAIGatewayService_OAuthDropsOrphanAfterDroppingPreviousResponse (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:48.6953977+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthDropsOrphanAfterDroppingPreviousResponse","Elapsed":0}
- {"Time":"2026-09-12T11:38:48.6953977+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreservesOversizedToolOutputForUpstream"}
- {"Time":"2026-09-12T11:38:48.6953977+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreservesOversizedToolOutputForUpstream","Output":"=== RUN TestOpenAIGatewayService_PreservesOversizedToolOutputForUpstream\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.0809778+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreservesOversizedToolOutputForUpstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.080Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5107,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreservesOversizedToolOutputForUpstream","Output":"--- PASS: TestOpenAIGatewayService_PreservesOversizedToolOutputForUpstream (0.41s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreservesOversizedToolOutputForUpstream","Elapsed":0.41}
- {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts"}
- {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/message/msg_123"}
- {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/message/msg_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/message/msg_123\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/message/msg_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/message/msg_123 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/message/msg_123","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/message/item_123"}
- {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/message/item_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/message/item_123\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/message/item_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/message/item_123 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/message/item_123","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/reasoning/rs_123"}
- {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/reasoning/rs_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/reasoning/rs_123\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/reasoning/rs_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/reasoning/rs_123 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/reasoning/rs_123","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/reasoning/item_123"}
- {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/reasoning/item_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/reasoning/item_123\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/reasoning/item_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/reasoning/item_123 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/reasoning/item_123","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/function_call/fc_123"}
- {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/function_call/fc_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/function_call/fc_123\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/function_call/fc_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/function_call/fc_123 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/function_call/fc_123","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/function_call/call_123"}
- {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/function_call/call_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/function_call/call_123\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/function_call/call_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/function_call/call_123 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/function_call/call_123","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_call/fc_123"}
- {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_call/fc_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_call/fc_123\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_call/fc_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_call/fc_123 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_call/fc_123","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/local_shell_call/fc_123"}
- {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/local_shell_call/fc_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/local_shell_call/fc_123\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/local_shell_call/fc_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/local_shell_call/fc_123 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/local_shell_call/fc_123","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/mcp_tool_call/fc_123"}
- {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/mcp_tool_call/fc_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/mcp_tool_call/fc_123\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/mcp_tool_call/fc_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/mcp_tool_call/fc_123 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/mcp_tool_call/fc_123","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call/ctc_123"}
- {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call/ctc_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call/ctc_123\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call/ctc_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call/ctc_123 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call/ctc_123","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call/fc_123"}
- {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call/fc_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call/fc_123\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call/fc_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call/fc_123 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call/fc_123","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_search_call/tsc_123"}
- {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_search_call/tsc_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_search_call/tsc_123\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_search_call/tsc_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_search_call/tsc_123 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_search_call/tsc_123","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_search_call/fc_123"}
- {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_search_call/fc_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_search_call/fc_123\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_search_call/fc_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_search_call/fc_123 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_search_call/fc_123","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/web_search_call/ws_123"}
- {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/web_search_call/ws_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/web_search_call/ws_123\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/web_search_call/ws_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/web_search_call/ws_123 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/web_search_call/ws_123","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/web_search_call/item_123"}
- {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/web_search_call/item_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/web_search_call/item_123\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/web_search_call/item_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/web_search_call/item_123 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/web_search_call/item_123","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call_output/fc_123"}
- {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call_output/fc_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call_output/fc_123\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call_output/fc_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call_output/fc_123 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call_output/fc_123","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call_output/ctco_123"}
- {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call_output/ctco_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call_output/ctco_123\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call_output/ctco_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call_output/ctco_123 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call_output/ctco_123","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/function_call_output/fco_123"}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/function_call_output/fco_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/function_call_output/fco_123\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/function_call_output/fco_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/function_call_output/fco_123 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/function_call_output/fco_123","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_search_output/tso_123"}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_search_output/tso_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_search_output/tso_123\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_search_output/tso_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_search_output/tso_123 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_search_output/tso_123","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/mcp_tool_call_output/mcpo_123"}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/mcp_tool_call_output/mcpo_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/mcp_tool_call_output/mcpo_123\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/mcp_tool_call_output/mcpo_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/mcp_tool_call_output/mcpo_123 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/mcp_tool_call_output/mcpo_123","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/future_item/item_123"}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/future_item/item_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/future_item/item_123\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/future_item/item_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/future_item/item_123 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/future_item/item_123","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsDoesNotCascadeAcrossIDNamespaces"}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsDoesNotCascadeAcrossIDNamespaces","Output":"=== RUN TestSanitizeOpenAIResponsesInputItemIDsDoesNotCascadeAcrossIDNamespaces\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsDoesNotCascadeAcrossIDNamespaces","Output":"--- PASS: TestSanitizeOpenAIResponsesInputItemIDsDoesNotCascadeAcrossIDNamespaces (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsDoesNotCascadeAcrossIDNamespaces","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsLeavesUnrelatedReferencesUntouched"}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsLeavesUnrelatedReferencesUntouched","Output":"=== RUN TestSanitizeOpenAIResponsesInputItemIDsLeavesUnrelatedReferencesUntouched\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsLeavesUnrelatedReferencesUntouched","Output":"--- PASS: TestSanitizeOpenAIResponsesInputItemIDsLeavesUnrelatedReferencesUntouched (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsLeavesUnrelatedReferencesUntouched","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsPreservesReferenceToDuplicateRetainedID"}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsPreservesReferenceToDuplicateRetainedID","Output":"=== RUN TestSanitizeOpenAIResponsesInputItemIDsPreservesReferenceToDuplicateRetainedID\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsPreservesReferenceToDuplicateRetainedID","Output":"--- PASS: TestSanitizeOpenAIResponsesInputItemIDsPreservesReferenceToDuplicateRetainedID (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsPreservesReferenceToDuplicateRetainedID","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsPreservesOpaqueOutputsAndReferences"}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsPreservesOpaqueOutputsAndReferences","Output":"=== RUN TestSanitizeOpenAIResponsesInputItemIDsPreservesOpaqueOutputsAndReferences\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsPreservesOpaqueOutputsAndReferences","Output":"--- PASS: TestSanitizeOpenAIResponsesInputItemIDsPreservesOpaqueOutputsAndReferences (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsPreservesOpaqueOutputsAndReferences","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsStripsEmptyKnownIDsOnly"}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsStripsEmptyKnownIDsOnly","Output":"=== RUN TestSanitizeOpenAIResponsesInputItemIDsStripsEmptyKnownIDsOnly\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsStripsEmptyKnownIDsOnly","Output":"--- PASS: TestSanitizeOpenAIResponsesInputItemIDsStripsEmptyKnownIDsOnly (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsStripsEmptyKnownIDsOnly","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsStripsOnlyNonPairCallIDs"}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsStripsOnlyNonPairCallIDs","Output":"=== RUN TestSanitizeOpenAIResponsesInputItemIDsStripsOnlyNonPairCallIDs\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsStripsOnlyNonPairCallIDs","Output":"--- PASS: TestSanitizeOpenAIResponsesInputItemIDsStripsOnlyNonPairCallIDs (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsStripsOnlyNonPairCallIDs","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPreservesCodexNamespaceTools"}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPreservesCodexNamespaceTools","Output":"=== RUN TestOpenAIGatewayService_OAuthPreservesCodexNamespaceTools\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPreservesCodexNamespaceTools","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.108Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5108,\"final_model\":\"gpt-5.6-terra\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:49.1091725+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPreservesCodexNamespaceTools","Output":"--- PASS: TestOpenAIGatewayService_OAuthPreservesCodexNamespaceTools (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1091725+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPreservesCodexNamespaceTools","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1091725+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPreservesDeclaredNamespaceToolCalls"}
- {"Time":"2026-09-12T11:38:49.1091725+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPreservesDeclaredNamespaceToolCalls","Output":"=== RUN TestOpenAIGatewayService_APIKeyPreservesDeclaredNamespaceToolCalls\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1091725+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPreservesDeclaredNamespaceToolCalls","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.109Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5107,\"final_model\":\"gpt-5.6-terra\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:49.1091725+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPreservesDeclaredNamespaceToolCalls","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPreservesDeclaredNamespaceToolCalls (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1091725+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPreservesDeclaredNamespaceToolCalls","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1091725+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthCompactKeepsFlattening"}
- {"Time":"2026-09-12T11:38:49.1091725+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthCompactKeepsFlattening","Output":"=== RUN TestOpenAIGatewayService_OAuthCompactKeepsFlattening\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1104117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthCompactKeepsFlattening","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.109Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5108,\"final_model\":\"gpt-5.6-terra\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthCompactKeepsFlattening","Output":"--- PASS: TestOpenAIGatewayService_OAuthCompactKeepsFlattening (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthCompactKeepsFlattening","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthFlattenFlagRestoresLegacyBehavior"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthFlattenFlagRestoresLegacyBehavior","Output":"=== RUN TestOpenAIGatewayService_OAuthFlattenFlagRestoresLegacyBehavior\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthFlattenFlagRestoresLegacyBehavior","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.109Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5108,\"final_model\":\"gpt-5.6-terra\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthFlattenFlagRestoresLegacyBehavior","Output":"--- PASS: TestOpenAIGatewayService_OAuthFlattenFlagRestoresLegacyBehavior (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthFlattenFlagRestoresLegacyBehavior","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardClearsStaleNamespaceNames"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardClearsStaleNamespaceNames","Output":"=== RUN TestOpenAIGatewayService_ForwardClearsStaleNamespaceNames\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardClearsStaleNamespaceNames","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.110Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5108,\"final_model\":\"gpt-5.6-terra\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardClearsStaleNamespaceNames","Output":"--- PASS: TestOpenAIGatewayService_ForwardClearsStaleNamespaceNames (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardClearsStaleNamespaceNames","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces","Output":"=== RUN TestShouldFlattenOpenAIResponsesNamespaces\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_http_default_preserves"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_http_default_preserves","Output":"=== RUN TestShouldFlattenOpenAIResponsesNamespaces/oauth_http_default_preserves\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_http_default_preserves","Output":"--- PASS: TestShouldFlattenOpenAIResponsesNamespaces/oauth_http_default_preserves (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_http_default_preserves","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_http_passthrough_default_preserves"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_http_passthrough_default_preserves","Output":"=== RUN TestShouldFlattenOpenAIResponsesNamespaces/oauth_http_passthrough_default_preserves\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_http_passthrough_default_preserves","Output":"--- PASS: TestShouldFlattenOpenAIResponsesNamespaces/oauth_http_passthrough_default_preserves (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_http_passthrough_default_preserves","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_wsv2_default_preserves"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_wsv2_default_preserves","Output":"=== RUN TestShouldFlattenOpenAIResponsesNamespaces/oauth_wsv2_default_preserves\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_wsv2_default_preserves","Output":"--- PASS: TestShouldFlattenOpenAIResponsesNamespaces/oauth_wsv2_default_preserves (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_wsv2_default_preserves","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_compact_flattens"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_compact_flattens","Output":"=== RUN TestShouldFlattenOpenAIResponsesNamespaces/oauth_compact_flattens\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_compact_flattens","Output":"--- PASS: TestShouldFlattenOpenAIResponsesNamespaces/oauth_compact_flattens (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_compact_flattens","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_compact_wsv2_preserves"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_compact_wsv2_preserves","Output":"=== RUN TestShouldFlattenOpenAIResponsesNamespaces/oauth_compact_wsv2_preserves\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_compact_wsv2_preserves","Output":"--- PASS: TestShouldFlattenOpenAIResponsesNamespaces/oauth_compact_wsv2_preserves (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_compact_wsv2_preserves","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/apikey_compact"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/apikey_compact","Output":"=== RUN TestShouldFlattenOpenAIResponsesNamespaces/apikey_compact\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/apikey_compact","Output":"--- PASS: TestShouldFlattenOpenAIResponsesNamespaces/apikey_compact (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/apikey_compact","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_http"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_http","Output":"=== RUN TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_http\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_http","Output":"--- PASS: TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_http (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_http","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_http_passthrough"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_http_passthrough","Output":"=== RUN TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_http_passthrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_http_passthrough","Output":"--- PASS: TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_http_passthrough (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_http_passthrough","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_wsv2"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_wsv2","Output":"=== RUN TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_wsv2\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_wsv2","Output":"--- PASS: TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_wsv2 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_wsv2","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_wsv2_passthrough"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_wsv2_passthrough","Output":"=== RUN TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_wsv2_passthrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_wsv2_passthrough","Output":"--- PASS: TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_wsv2_passthrough (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_wsv2_passthrough","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/apikey_flatten_enabled_http"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/apikey_flatten_enabled_http","Output":"=== RUN TestShouldFlattenOpenAIResponsesNamespaces/apikey_flatten_enabled_http\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/apikey_flatten_enabled_http","Output":"--- PASS: TestShouldFlattenOpenAIResponsesNamespaces/apikey_flatten_enabled_http (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/apikey_flatten_enabled_http","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/apikey_http"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/apikey_http","Output":"=== RUN TestShouldFlattenOpenAIResponsesNamespaces/apikey_http\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/apikey_http","Output":"--- PASS: TestShouldFlattenOpenAIResponsesNamespaces/apikey_http (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/apikey_http","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/grok_oauth_http"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/grok_oauth_http","Output":"=== RUN TestShouldFlattenOpenAIResponsesNamespaces/grok_oauth_http\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/grok_oauth_http","Output":"--- PASS: TestShouldFlattenOpenAIResponsesNamespaces/grok_oauth_http (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/grok_oauth_http","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/nil_account"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/nil_account","Output":"=== RUN TestShouldFlattenOpenAIResponsesNamespaces/nil_account\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/nil_account","Output":"--- PASS: TestShouldFlattenOpenAIResponsesNamespaces/nil_account (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/nil_account","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces","Output":"--- PASS: TestShouldFlattenOpenAIResponsesNamespaces (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces","Output":"=== RUN TestShouldKeepOpenAIResponsesToolCallNamespaces\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_http_keeps"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_http_keeps","Output":"=== RUN TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_http_keeps\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_http_keeps","Output":"--- PASS: TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_http_keeps (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_http_keeps","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_http_passthrough_keeps"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_http_passthrough_keeps","Output":"=== RUN TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_http_passthrough_keeps\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_http_passthrough_keeps","Output":"--- PASS: TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_http_passthrough_keeps (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_http_passthrough_keeps","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_compact_strips"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_compact_strips","Output":"=== RUN TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_compact_strips\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_compact_strips","Output":"--- PASS: TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_compact_strips (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_compact_strips","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_flatten_enabled_strips"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_flatten_enabled_strips","Output":"=== RUN TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_flatten_enabled_strips\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_flatten_enabled_strips","Output":"--- PASS: TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_flatten_enabled_strips (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_flatten_enabled_strips","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_wsv2_keeps"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_wsv2_keeps","Output":"=== RUN TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_wsv2_keeps\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_wsv2_keeps","Output":"--- PASS: TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_wsv2_keeps (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_wsv2_keeps","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_compact_wsv2_strips"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_compact_wsv2_strips","Output":"=== RUN TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_compact_wsv2_strips\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_compact_wsv2_strips","Output":"--- PASS: TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_compact_wsv2_strips (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_compact_wsv2_strips","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_without_namespace_tool_strips"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_without_namespace_tool_strips","Output":"=== RUN TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_without_namespace_tool_strips\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_without_namespace_tool_strips","Output":"--- PASS: TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_without_namespace_tool_strips (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_without_namespace_tool_strips","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_with_namespace_tool_keeps"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_with_namespace_tool_keeps","Output":"=== RUN TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_with_namespace_tool_keeps\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_with_namespace_tool_keeps","Output":"--- PASS: TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_with_namespace_tool_keeps (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_with_namespace_tool_keeps","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_with_mixed_case_namespace_tool_keeps"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_with_mixed_case_namespace_tool_keeps","Output":"=== RUN TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_with_mixed_case_namespace_tool_keeps\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_with_mixed_case_namespace_tool_keeps","Output":"--- PASS: TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_with_mixed_case_namespace_tool_keeps (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_with_mixed_case_namespace_tool_keeps","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_function_tool_with_namespace_field_strips"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_function_tool_with_namespace_field_strips","Output":"=== RUN TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_function_tool_with_namespace_field_strips\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_function_tool_with_namespace_field_strips","Output":"--- PASS: TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_function_tool_with_namespace_field_strips (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_function_tool_with_namespace_field_strips","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_compact_with_namespace_tool_strips"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_compact_with_namespace_tool_strips","Output":"=== RUN TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_compact_with_namespace_tool_strips\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_compact_with_namespace_tool_strips","Output":"--- PASS: TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_compact_with_namespace_tool_strips (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_compact_with_namespace_tool_strips","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/setup_token_keeps"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/setup_token_keeps","Output":"=== RUN TestShouldKeepOpenAIResponsesToolCallNamespaces/setup_token_keeps\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/setup_token_keeps","Output":"--- PASS: TestShouldKeepOpenAIResponsesToolCallNamespaces/setup_token_keeps (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/setup_token_keeps","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/nil_account"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/nil_account","Output":"=== RUN TestShouldKeepOpenAIResponsesToolCallNamespaces/nil_account\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/nil_account","Output":"--- PASS: TestShouldKeepOpenAIResponsesToolCallNamespaces/nil_account (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/nil_account","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces","Output":"--- PASS: TestShouldKeepOpenAIResponsesToolCallNamespaces (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces","Output":"=== RUN TestShouldStripOpenAIResponsesInputNamespaces\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/oauth_http"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/oauth_http","Output":"=== RUN TestShouldStripOpenAIResponsesInputNamespaces/oauth_http\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/oauth_http","Output":"--- PASS: TestShouldStripOpenAIResponsesInputNamespaces/oauth_http (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/oauth_http","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/apikey_http"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/apikey_http","Output":"=== RUN TestShouldStripOpenAIResponsesInputNamespaces/apikey_http\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/apikey_http","Output":"--- PASS: TestShouldStripOpenAIResponsesInputNamespaces/apikey_http (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/apikey_http","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/oauth_wsv2"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/oauth_wsv2","Output":"=== RUN TestShouldStripOpenAIResponsesInputNamespaces/oauth_wsv2\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/oauth_wsv2","Output":"--- PASS: TestShouldStripOpenAIResponsesInputNamespaces/oauth_wsv2 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/oauth_wsv2","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/apikey_wsv2"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/apikey_wsv2","Output":"=== RUN TestShouldStripOpenAIResponsesInputNamespaces/apikey_wsv2\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/apikey_wsv2","Output":"--- PASS: TestShouldStripOpenAIResponsesInputNamespaces/apikey_wsv2 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/apikey_wsv2","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/oauth_wsv2_passthrough"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/oauth_wsv2_passthrough","Output":"=== RUN TestShouldStripOpenAIResponsesInputNamespaces/oauth_wsv2_passthrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/oauth_wsv2_passthrough","Output":"--- PASS: TestShouldStripOpenAIResponsesInputNamespaces/oauth_wsv2_passthrough (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/oauth_wsv2_passthrough","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/apikey_wsv2_passthrough"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/apikey_wsv2_passthrough","Output":"=== RUN TestShouldStripOpenAIResponsesInputNamespaces/apikey_wsv2_passthrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/apikey_wsv2_passthrough","Output":"--- PASS: TestShouldStripOpenAIResponsesInputNamespaces/apikey_wsv2_passthrough (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/apikey_wsv2_passthrough","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/setup_token_http"}
- {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/setup_token_http","Output":"=== RUN TestShouldStripOpenAIResponsesInputNamespaces/setup_token_http\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/setup_token_http","Output":"--- PASS: TestShouldStripOpenAIResponsesInputNamespaces/setup_token_http (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/setup_token_http","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/grok_oauth_http"}
- {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/grok_oauth_http","Output":"=== RUN TestShouldStripOpenAIResponsesInputNamespaces/grok_oauth_http\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/grok_oauth_http","Output":"--- PASS: TestShouldStripOpenAIResponsesInputNamespaces/grok_oauth_http (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/grok_oauth_http","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/nil_account"}
- {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/nil_account","Output":"=== RUN TestShouldStripOpenAIResponsesInputNamespaces/nil_account\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/nil_account","Output":"--- PASS: TestShouldStripOpenAIResponsesInputNamespaces/nil_account (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/nil_account","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces","Output":"--- PASS: TestShouldStripOpenAIResponsesInputNamespaces (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIResponsesInputNamespaces"}
- {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIResponsesInputNamespaces","Output":"=== RUN TestStripOpenAIResponsesInputNamespaces\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIResponsesInputNamespaces","Output":"--- PASS: TestStripOpenAIResponsesInputNamespaces (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIResponsesInputNamespaces","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIResponsesInputNamespacesLeavesOtherShapesByteExact"}
- {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIResponsesInputNamespacesLeavesOtherShapesByteExact","Output":"=== RUN TestStripOpenAIResponsesInputNamespacesLeavesOtherShapesByteExact\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIResponsesInputNamespacesLeavesOtherShapesByteExact","Output":"--- PASS: TestStripOpenAIResponsesInputNamespacesLeavesOtherShapesByteExact (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIResponsesInputNamespacesLeavesOtherShapesByteExact","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIResponsesInputNamespacesKeepsToolCallNamespaces"}
- {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIResponsesInputNamespacesKeepsToolCallNamespaces","Output":"=== RUN TestStripOpenAIResponsesInputNamespacesKeepsToolCallNamespaces\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIResponsesInputNamespacesKeepsToolCallNamespaces","Output":"--- PASS: TestStripOpenAIResponsesInputNamespacesKeepsToolCallNamespaces (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIResponsesInputNamespacesKeepsToolCallNamespaces","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRejectedFieldRetryStateRejectsDuplicateBodyAndCap"}
- {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRejectedFieldRetryStateRejectsDuplicateBodyAndCap","Output":"=== RUN TestOpenAIResponsesRejectedFieldRetryStateRejectsDuplicateBodyAndCap\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRejectedFieldRetryStateRejectsDuplicateBodyAndCap","Output":"--- PASS: TestOpenAIResponsesRejectedFieldRetryStateRejectsDuplicateBodyAndCap (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRejectedFieldRetryStateRejectsDuplicateBodyAndCap","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRejectedFieldRetryStateForRequestAllowsSameTransformAcrossAccounts"}
- {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRejectedFieldRetryStateForRequestAllowsSameTransformAcrossAccounts","Output":"=== RUN TestOpenAIResponsesRejectedFieldRetryStateForRequestAllowsSameTransformAcrossAccounts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRejectedFieldRetryStateForRequestAllowsSameTransformAcrossAccounts","Output":"--- PASS: TestOpenAIResponsesRejectedFieldRetryStateForRequestAllowsSameTransformAcrossAccounts (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRejectedFieldRetryStateForRequestAllowsSameTransformAcrossAccounts","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRejectedFieldRetryStateForRequestSharesBoundedBudgetAcrossAccounts"}
- {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRejectedFieldRetryStateForRequestSharesBoundedBudgetAcrossAccounts","Output":"=== RUN TestOpenAIResponsesRejectedFieldRetryStateForRequestSharesBoundedBudgetAcrossAccounts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRejectedFieldRetryStateForRequestSharesBoundedBudgetAcrossAccounts","Output":"--- PASS: TestOpenAIResponsesRejectedFieldRetryStateForRequestSharesBoundedBudgetAcrossAccounts (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRejectedFieldRetryStateForRequestSharesBoundedBudgetAcrossAccounts","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors"}
- {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/namespace_belongs_to_message"}
- {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/namespace_belongs_to_message","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/namespace_belongs_to_message\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/namespace_belongs_to_message","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/namespace_belongs_to_message (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/namespace_belongs_to_message","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/max_output_tokens_only_mentioned"}
- {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/max_output_tokens_only_mentioned","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/max_output_tokens_only_mentioned\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/max_output_tokens_only_mentioned","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/max_output_tokens_only_mentioned (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/max_output_tokens_only_mentioned","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/structured_param_overrides_namespace_mention"}
- {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/structured_param_overrides_namespace_mention","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/structured_param_overrides_namespace_mention\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/structured_param_overrides_namespace_mention","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/structured_param_overrides_namespace_mention (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/structured_param_overrides_namespace_mention","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/nested_max_output_tokens_param_is_not_top_level"}
- {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/nested_max_output_tokens_param_is_not_top_level","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/nested_max_output_tokens_param_is_not_top_level\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/nested_max_output_tokens_param_is_not_top_level","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/nested_max_output_tokens_param_is_not_top_level (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/nested_max_output_tokens_param_is_not_top_level","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/structured_target_conflicts_with_message_target"}
- {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/structured_target_conflicts_with_message_target","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/structured_target_conflicts_with_message_target\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/structured_target_conflicts_with_message_target","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/structured_target_conflicts_with_message_target (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/structured_target_conflicts_with_message_target","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1131605+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRepairsAutomationMissingRootType"}
- {"Time":"2026-09-12T11:38:49.1131605+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRepairsAutomationMissingRootType","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRepairsAutomationMissingRootType\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1131605+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRepairsAutomationMissingRootType","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRepairsAutomationMissingRootType (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1131605+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRepairsAutomationMissingRootType","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1131605+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyDoesNotGuessAutomationRootType"}
- {"Time":"2026-09-12T11:38:49.1131605+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyDoesNotGuessAutomationRootType","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyDoesNotGuessAutomationRootType\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1131605+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyDoesNotGuessAutomationRootType","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyDoesNotGuessAutomationRootType (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1131605+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyDoesNotGuessAutomationRootType","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1131605+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyFindsNamespacePathInMessage"}
- {"Time":"2026-09-12T11:38:49.1131605+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyFindsNamespacePathInMessage","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyFindsNamespacePathInMessage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1131605+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyFindsNamespacePathInMessage","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyFindsNamespacePathInMessage (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1131605+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyFindsNamespacePathInMessage","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1131605+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyBindsNamespacePathToRejectionPhrase"}
- {"Time":"2026-09-12T11:38:49.1131605+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyBindsNamespacePathToRejectionPhrase","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyBindsNamespacePathToRejectionPhrase\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyBindsNamespacePathToRejectionPhrase","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyBindsNamespacePathToRejectionPhrase (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyBindsNamespacePathToRejectionPhrase","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyDoesNotTreatMaxOutputTokensSuggestionAsRejection"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyDoesNotTreatMaxOutputTokensSuggestionAsRejection","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyDoesNotTreatMaxOutputTokensSuggestionAsRejection\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyDoesNotTreatMaxOutputTokensSuggestionAsRejection","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyDoesNotTreatMaxOutputTokensSuggestionAsRejection (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyDoesNotTreatMaxOutputTokensSuggestionAsRejection","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyBindsMaxOutputTokensToRejectionPhrase"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyBindsMaxOutputTokensToRejectionPhrase","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyBindsMaxOutputTokensToRejectionPhrase\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyBindsMaxOutputTokensToRejectionPhrase","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyBindsMaxOutputTokensToRejectionPhrase (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyBindsMaxOutputTokensToRejectionPhrase","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactIndexedStatus"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactIndexedStatus","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactIndexedStatus\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactIndexedStatus/structured_param"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactIndexedStatus/structured_param","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactIndexedStatus/structured_param\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactIndexedStatus/structured_param","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactIndexedStatus/structured_param (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactIndexedStatus/structured_param","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactIndexedStatus/message_param"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactIndexedStatus/message_param","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactIndexedStatus/message_param\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactIndexedStatus/message_param","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactIndexedStatus/message_param (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactIndexedStatus/message_param","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactIndexedStatus","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactIndexedStatus (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactIndexedStatus","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/message_becomes_empty_string"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/message_becomes_empty_string","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/message_becomes_empty_string\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/message_becomes_empty_string","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/message_becomes_empty_string (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/message_becomes_empty_string","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/reasoning_content_is_removed"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/reasoning_content_is_removed","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/reasoning_content_is_removed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/reasoning_content_is_removed","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/reasoning_content_is_removed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/reasoning_content_is_removed","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/unknown_item_is_unchanged"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/unknown_item_is_unchanged","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/unknown_item_is_unchanged\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/unknown_item_is_unchanged","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/unknown_item_is_unchanged (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/unknown_item_is_unchanged","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/non_null_content_is_unchanged"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/non_null_content_is_unchanged","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/non_null_content_is_unchanged\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/non_null_content_is_unchanged","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/non_null_content_is_unchanged (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/non_null_content_is_unchanged","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactReasoningContentAboveMaximumZero"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactReasoningContentAboveMaximumZero","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactReasoningContentAboveMaximumZero\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactReasoningContentAboveMaximumZero","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactReasoningContentAboveMaximumZero (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactReasoningContentAboveMaximumZero","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations/message_content_is_not_reasoning"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations/message_content_is_not_reasoning","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations/message_content_is_not_reasoning\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations/message_content_is_not_reasoning","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations/message_content_is_not_reasoning (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations/message_content_is_not_reasoning","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations/structured_param_and_message_disagree"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations/structured_param_and_message_disagree","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations/structured_param_and_message_disagree\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations/structured_param_and_message_disagree","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations/structured_param_and_message_disagree (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations/structured_param_and_message_disagree","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations/different_error_code"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations/different_error_code","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations/different_error_code\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations/different_error_code","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations/different_error_code (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations/different_error_code","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExplicitlyRejectedTopLevelTruncation"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExplicitlyRejectedTopLevelTruncation","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExplicitlyRejectedTopLevelTruncation\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExplicitlyRejectedTopLevelTruncation","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExplicitlyRejectedTopLevelTruncation (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExplicitlyRejectedTopLevelTruncation","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyRetriesExplicitlyRejectedTopLevelTruncation"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyRetriesExplicitlyRejectedTopLevelTruncation","Output":"=== RUN TestOpenAIGatewayService_APIKeyRetriesExplicitlyRejectedTopLevelTruncation\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyRetriesExplicitlyRejectedTopLevelTruncation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.114Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5107,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyRetriesExplicitlyRejectedTopLevelTruncation","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:49.114Z\",\"msg\":\"[OpenAI] Retrying non-WSv2 request after truncation parameter rejection (account: responses-compatible)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyRetriesExplicitlyRejectedTopLevelTruncation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.114Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5107,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyRetriesExplicitlyRejectedTopLevelTruncation","Output":"--- PASS: TestOpenAIGatewayService_APIKeyRetriesExplicitlyRejectedTopLevelTruncation (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyRetriesExplicitlyRejectedTopLevelTruncation","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/nested_status_path"}
- {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/nested_status_path","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/nested_status_path\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/nested_status_path","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/nested_status_path (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/nested_status_path","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/status_index_out_of_bounds"}
- {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/status_index_out_of_bounds","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/status_index_out_of_bounds\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/status_index_out_of_bounds","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/status_index_out_of_bounds (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/status_index_out_of_bounds","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/status_path_only_mentioned"}
- {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/status_path_only_mentioned","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/status_path_only_mentioned\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/status_path_only_mentioned","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/status_path_only_mentioned (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/status_path_only_mentioned","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/content_param_and_message_disagree"}
- {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/content_param_and_message_disagree","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/content_param_and_message_disagree\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/content_param_and_message_disagree","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/content_param_and_message_disagree (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/content_param_and_message_disagree","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/content_error_only_mentions_null"}
- {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/content_error_only_mentions_null","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/content_error_only_mentions_null\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/content_error_only_mentions_null","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/content_error_only_mentions_null (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/content_error_only_mentions_null","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthRetriesExactRejectedStatus"}
- {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthRetriesExactRejectedStatus","Output":"=== RUN TestOpenAIGatewayService_OAuthRetriesExactRejectedStatus\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthRetriesExactRejectedStatus","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.114Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5108,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthRetriesExactRejectedStatus","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:49.114Z\",\"msg\":\"[OpenAI] Retrying non-WSv2 request after indexed status parameter rejection (account: openai-oauth-namespace)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthRetriesExactRejectedStatus","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.114Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5108,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthRetriesExactRejectedStatus","Output":"--- PASS: TestOpenAIGatewayService_OAuthRetriesExactRejectedStatus (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthRetriesExactRejectedStatus","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyRetriesExactRejectedNullMessageContent"}
- {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyRetriesExactRejectedNullMessageContent","Output":"=== RUN TestOpenAIGatewayService_APIKeyRetriesExactRejectedNullMessageContent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyRetriesExactRejectedNullMessageContent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.114Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5107,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyRetriesExactRejectedNullMessageContent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:49.114Z\",\"msg\":\"[OpenAI] Retrying non-WSv2 request after indexed message null content rejection (account: responses-compatible)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyRetriesExactRejectedNullMessageContent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.114Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5107,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyRetriesExactRejectedNullMessageContent","Output":"--- PASS: TestOpenAIGatewayService_APIKeyRetriesExactRejectedNullMessageContent (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyRetriesExactRejectedNullMessageContent","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesModelRejectedPromptCacheBreakpoint"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesModelRejectedPromptCacheBreakpoint","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesModelRejectedPromptCacheBreakpoint\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesModelRejectedPromptCacheBreakpoint/top_level"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesModelRejectedPromptCacheBreakpoint/top_level","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesModelRejectedPromptCacheBreakpoint/top_level\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesModelRejectedPromptCacheBreakpoint/top_level","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesModelRejectedPromptCacheBreakpoint/top_level (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesModelRejectedPromptCacheBreakpoint/top_level","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesModelRejectedPromptCacheBreakpoint/indexed_path_from_message"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesModelRejectedPromptCacheBreakpoint/indexed_path_from_message","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesModelRejectedPromptCacheBreakpoint/indexed_path_from_message\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesModelRejectedPromptCacheBreakpoint/indexed_path_from_message","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesModelRejectedPromptCacheBreakpoint/indexed_path_from_message (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesModelRejectedPromptCacheBreakpoint/indexed_path_from_message","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesModelRejectedPromptCacheBreakpoint","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesModelRejectedPromptCacheBreakpoint (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesModelRejectedPromptCacheBreakpoint","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousPromptCacheBreakpointErrors"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousPromptCacheBreakpointErrors","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousPromptCacheBreakpointErrors\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousPromptCacheBreakpointErrors/structured_param_disagrees"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousPromptCacheBreakpointErrors/structured_param_disagrees","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousPromptCacheBreakpointErrors/structured_param_disagrees\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousPromptCacheBreakpointErrors/structured_param_disagrees","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousPromptCacheBreakpointErrors/structured_param_disagrees (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousPromptCacheBreakpointErrors/structured_param_disagrees","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousPromptCacheBreakpointErrors/index_out_of_bounds"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousPromptCacheBreakpointErrors/index_out_of_bounds","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousPromptCacheBreakpointErrors/index_out_of_bounds\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousPromptCacheBreakpointErrors/index_out_of_bounds","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousPromptCacheBreakpointErrors/index_out_of_bounds (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousPromptCacheBreakpointErrors/index_out_of_bounds","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousPromptCacheBreakpointErrors","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousPromptCacheBreakpointErrors (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousPromptCacheBreakpointErrors","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyAcceptsEitherCacheModelRejectionSignal"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyAcceptsEitherCacheModelRejectionSignal","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyAcceptsEitherCacheModelRejectionSignal\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyAcceptsEitherCacheModelRejectionSignal/invalid_parameter_code"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyAcceptsEitherCacheModelRejectionSignal/invalid_parameter_code","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyAcceptsEitherCacheModelRejectionSignal/invalid_parameter_code\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyAcceptsEitherCacheModelRejectionSignal/invalid_parameter_code","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyAcceptsEitherCacheModelRejectionSignal/invalid_parameter_code (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyAcceptsEitherCacheModelRejectionSignal/invalid_parameter_code","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyAcceptsEitherCacheModelRejectionSignal/model_rejection_message"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyAcceptsEitherCacheModelRejectionSignal/model_rejection_message","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyAcceptsEitherCacheModelRejectionSignal/model_rejection_message\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyAcceptsEitherCacheModelRejectionSignal/model_rejection_message","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyAcceptsEitherCacheModelRejectionSignal/model_rejection_message (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyAcceptsEitherCacheModelRejectionSignal/model_rejection_message","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyAcceptsEitherCacheModelRejectionSignal","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyAcceptsEitherCacheModelRejectionSignal (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyAcceptsEitherCacheModelRejectionSignal","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRejectedFieldRetryStateAllowsPromptCacheBreakpointVariantOnce"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRejectedFieldRetryStateAllowsPromptCacheBreakpointVariantOnce","Output":"=== RUN TestOpenAIResponsesRejectedFieldRetryStateAllowsPromptCacheBreakpointVariantOnce\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRejectedFieldRetryStateAllowsPromptCacheBreakpointVariantOnce","Output":"--- PASS: TestOpenAIResponsesRejectedFieldRetryStateAllowsPromptCacheBreakpointVariantOnce (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRejectedFieldRetryStateAllowsPromptCacheBreakpointVariantOnce","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyStripsAllIndexedNamespacesBeforeFirstForward"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyStripsAllIndexedNamespacesBeforeFirstForward","Output":"=== RUN TestOpenAIGatewayService_APIKeyStripsAllIndexedNamespacesBeforeFirstForward\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyStripsAllIndexedNamespacesBeforeFirstForward","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.115Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5107,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyStripsAllIndexedNamespacesBeforeFirstForward","Output":"--- PASS: TestOpenAIGatewayService_APIKeyStripsAllIndexedNamespacesBeforeFirstForward (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyStripsAllIndexedNamespacesBeforeFirstForward","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceProactivelyStripsCrossProviderReasoningContent"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceProactivelyStripsCrossProviderReasoningContent","Output":"=== RUN TestOpenAIGatewayServiceProactivelyStripsCrossProviderReasoningContent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceProactivelyStripsCrossProviderReasoningContent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.115Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5107,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceProactivelyStripsCrossProviderReasoningContent","Output":"--- PASS: TestOpenAIGatewayServiceProactivelyStripsCrossProviderReasoningContent (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceProactivelyStripsCrossProviderReasoningContent","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward","Output":"=== RUN TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/oauth/v1/responses"}
- {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/oauth/v1/responses","Output":"=== RUN TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/oauth/v1/responses\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1163102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/oauth/v1/responses","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.116Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5108,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:49.1163102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/oauth/v1/responses","Output":"--- PASS: TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/oauth/v1/responses (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1163102+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/oauth/v1/responses","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1163102+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/oauth/v1/responses/compact"}
- {"Time":"2026-09-12T11:38:49.1163102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/oauth/v1/responses/compact","Output":"=== RUN TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/oauth/v1/responses/compact\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1163102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/oauth/v1/responses/compact","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.116Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5108,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:49.1163102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/oauth/v1/responses/compact","Output":"--- PASS: TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/oauth/v1/responses/compact (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1163102+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/oauth/v1/responses/compact","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1163102+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/apikey/v1/responses"}
- {"Time":"2026-09-12T11:38:49.1163102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/apikey/v1/responses","Output":"=== RUN TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/apikey/v1/responses\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/apikey/v1/responses","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.116Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5107,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/apikey/v1/responses","Output":"--- PASS: TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/apikey/v1/responses (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/apikey/v1/responses","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/apikey/v1/responses/compact"}
- {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/apikey/v1/responses/compact","Output":"=== RUN TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/apikey/v1/responses/compact\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/apikey/v1/responses/compact","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.116Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5107,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/apikey/v1/responses/compact","Output":"--- PASS: TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/apikey/v1/responses/compact (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/apikey/v1/responses/compact","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward","Output":"--- PASS: TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_RetriesExplicitMaxOutputTokensRejection"}
- {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_RetriesExplicitMaxOutputTokensRejection","Output":"=== RUN TestOpenAIGatewayService_RetriesExplicitMaxOutputTokensRejection\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_RetriesExplicitMaxOutputTokensRejection","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.116Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5107,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_RetriesExplicitMaxOutputTokensRejection","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:49.116Z\",\"msg\":\"[OpenAI] Retrying non-WSv2 request after max_output_tokens parameter rejection (account: responses-compatible)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_RetriesExplicitMaxOutputTokensRejection","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.116Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5107,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_RetriesExplicitMaxOutputTokensRejection","Output":"--- PASS: TestOpenAIGatewayService_RetriesExplicitMaxOutputTokensRejection (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_RetriesExplicitMaxOutputTokensRejection","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ComposesProactiveNamespaceStripWithRejectedFieldRetry"}
- {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ComposesProactiveNamespaceStripWithRejectedFieldRetry","Output":"=== RUN TestOpenAIGatewayService_ComposesProactiveNamespaceStripWithRejectedFieldRetry\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ComposesProactiveNamespaceStripWithRejectedFieldRetry","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.116Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5107,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ComposesProactiveNamespaceStripWithRejectedFieldRetry","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:49.116Z\",\"msg\":\"[OpenAI] Retrying non-WSv2 request after max_output_tokens parameter rejection (account: responses-compatible)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ComposesProactiveNamespaceStripWithRejectedFieldRetry","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.116Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5107,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ComposesProactiveNamespaceStripWithRejectedFieldRetry","Output":"--- PASS: TestOpenAIGatewayService_ComposesProactiveNamespaceStripWithRejectedFieldRetry (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ComposesProactiveNamespaceStripWithRejectedFieldRetry","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyClearsStatusForWholeType"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyClearsStatusForWholeType","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyClearsStatusForWholeType\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyClearsStatusForWholeType","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyClearsStatusForWholeType (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyClearsStatusForWholeType","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyClearsUntypedStatusAtIndexOnly"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyClearsUntypedStatusAtIndexOnly","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyClearsUntypedStatusAtIndexOnly\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyClearsUntypedStatusAtIndexOnly","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyClearsUntypedStatusAtIndexOnly (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyClearsUntypedStatusAtIndexOnly","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_TopLevelFunctionTool"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_TopLevelFunctionTool","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_TopLevelFunctionTool\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_TopLevelFunctionTool","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_TopLevelFunctionTool (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_TopLevelFunctionTool","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ValidSchemaUntouched"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ValidSchemaUntouched","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_ValidSchemaUntouched\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ValidSchemaUntouched","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_ValidSchemaUntouched (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ValidSchemaUntouched","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MissingTypeNotInvented"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MissingTypeNotInvented","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_MissingTypeNotInvented\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MissingTypeNotInvented","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_MissingTypeNotInvented (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MissingTypeNotInvented","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectOnlyRootUnion"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectOnlyRootUnion","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_ObjectOnlyRootUnion\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectOnlyRootUnion","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_ObjectOnlyRootUnion (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectOnlyRootUnion","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_EscapedUnionKeyword"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_EscapedUnionKeyword","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_EscapedUnionKeyword\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_EscapedUnionKeyword","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_EscapedUnionKeyword (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_EscapedUnionKeyword","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/mixed_union"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/mixed_union","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/mixed_union\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/mixed_union","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/mixed_union (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/mixed_union","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/unproven_branch"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/unproven_branch","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/unproven_branch\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/unproven_branch","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/unproven_branch (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/unproven_branch","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/empty_union"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/empty_union","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/empty_union\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/empty_union","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/empty_union (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/empty_union","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/existing_null_handled_by_existing_repair"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/existing_null_handled_by_existing_repair","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/existing_null_handled_by_existing_repair\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/existing_null_handled_by_existing_repair","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/existing_null_handled_by_existing_repair (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/existing_null_handled_by_existing_repair","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_NestedHistoryTools"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_NestedHistoryTools","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_NestedHistoryTools\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_NestedHistoryTools","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_NestedHistoryTools (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_NestedHistoryTools","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ChatCompletionsShape"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ChatCompletionsShape","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_ChatCompletionsShape\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ChatCompletionsShape","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_ChatCompletionsShape (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ChatCompletionsShape","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_InputItemShapes"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_InputItemShapes","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_InputItemShapes\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_InputItemShapes","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_InputItemShapes (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_InputItemShapes","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_DoesNotTreatMessagesAsTools"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_DoesNotTreatMessagesAsTools","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_DoesNotTreatMessagesAsTools\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_DoesNotTreatMessagesAsTools","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_DoesNotTreatMessagesAsTools (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_DoesNotTreatMessagesAsTools","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_PreservesUntouchedBytes"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_PreservesUntouchedBytes","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_PreservesUntouchedBytes\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_PreservesUntouchedBytes","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_PreservesUntouchedBytes (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_PreservesUntouchedBytes","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_EscapedKey"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_EscapedKey","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_EscapedKey\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_EscapedKey","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_EscapedKey (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_EscapedKey","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_DuplicateTypeIsAmbiguousNoOp"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_DuplicateTypeIsAmbiguousNoOp","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_DuplicateTypeIsAmbiguousNoOp\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_DuplicateTypeIsAmbiguousNoOp","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_DuplicateTypeIsAmbiguousNoOp (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_DuplicateTypeIsAmbiguousNoOp","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON/null_type_trailing"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON/null_type_trailing","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON/null_type_trailing\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON/null_type_trailing","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON/null_type_trailing (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON/null_type_trailing","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON/pattern_trailing"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON/pattern_trailing","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON/pattern_trailing\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON/pattern_trailing","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON/pattern_trailing (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON/pattern_trailing","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON/invalid_utf8"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON/invalid_utf8","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON/invalid_utf8\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON/invalid_utf8","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON/invalid_utf8 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON/invalid_utf8","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary","Output":"=== RUN TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/openai"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/openai","Output":"=== RUN TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/openai\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/openai","Output":"--- PASS: TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/openai (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/openai","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/anthropic"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/anthropic","Output":"=== RUN TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/anthropic\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/anthropic","Output":"--- PASS: TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/anthropic (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/anthropic","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/kimi"}
- {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/kimi","Output":"=== RUN TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/kimi\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/kimi","Output":"--- PASS: TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/kimi (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/kimi","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/zhipu"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/zhipu","Output":"=== RUN TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/zhipu\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/zhipu","Output":"--- PASS: TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/zhipu (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/zhipu","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/deepseek"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/deepseek","Output":"=== RUN TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/deepseek\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/deepseek","Output":"--- PASS: TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/deepseek (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/deepseek","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/grok"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/grok","Output":"=== RUN TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/grok\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/grok","Output":"--- PASS: TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/grok (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/grok","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/gemini"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/gemini","Output":"=== RUN TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/gemini\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/gemini","Output":"--- PASS: TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/gemini (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/gemini","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/antigravity"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/antigravity","Output":"=== RUN TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/antigravity\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/antigravity","Output":"--- PASS: TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/antigravity (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/antigravity","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/composite"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/composite","Output":"=== RUN TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/composite\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/composite","Output":"--- PASS: TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/composite (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/composite","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/#00"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/#00","Output":"=== RUN TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/#00\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/#00","Output":"--- PASS: TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/#00 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/#00","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary","Output":"--- PASS: TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/anthropic"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/anthropic","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/anthropic\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/anthropic","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/anthropic (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/anthropic","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/grok"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/grok","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/grok\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/grok","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/grok (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/grok","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/kimi"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/kimi","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/kimi\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/kimi","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/kimi (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/kimi","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/zhipu"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/zhipu","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/zhipu\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/zhipu","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/zhipu (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/zhipu","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/deepseek"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/deepseek","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/deepseek\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/deepseek","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/deepseek (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/deepseek","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/minimax"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/minimax","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/minimax\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/minimax","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/minimax (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/minimax","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_GrokObjectOnlyRootUnion"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_GrokObjectOnlyRootUnion","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemasForPlatform_GrokObjectOnlyRootUnion\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_GrokObjectOnlyRootUnion","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemasForPlatform_GrokObjectOnlyRootUnion (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_GrokObjectOnlyRootUnion","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_OnlyOffendingIndexRewritten"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_OnlyOffendingIndexRewritten","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_OnlyOffendingIndexRewritten\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_OnlyOffendingIndexRewritten","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_OnlyOffendingIndexRewritten (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_OnlyOffendingIndexRewritten","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/empty_body"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/empty_body","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/empty_body\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/empty_body","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/empty_body (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/empty_body","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/no_tools"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/no_tools","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/no_tools\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/no_tools","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/no_tools (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/no_tools","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/tools_null"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/tools_null","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/tools_null\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/tools_null","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/tools_null (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/tools_null","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/tools_object"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/tools_object","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/tools_object\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/tools_object","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/tools_object (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/tools_object","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/tool_is_string"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/tool_is_string","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/tool_is_string\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/tool_is_string","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/tool_is_string (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/tool_is_string","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/parameters_is_string"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/parameters_is_string","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/parameters_is_string\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/parameters_is_string","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/parameters_is_string (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/parameters_is_string","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/parameters_null"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/parameters_null","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/parameters_null\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/parameters_null","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/parameters_null (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/parameters_null","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/input_string"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/input_string","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/input_string\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/input_string","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/input_string (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/input_string","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/input_item_not_object"}
- {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/input_item_not_object","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/input_item_not_object\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/input_item_not_object","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/input_item_not_object (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/input_item_not_object","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/type_already_array"}
- {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/type_already_array","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/type_already_array\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/type_already_array","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/type_already_array (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/type_already_array","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_DepthGuard"}
- {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_DepthGuard","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_DepthGuard\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_DepthGuard","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_DepthGuard (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_DepthGuard","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_OutputStaysValidJSON"}
- {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_OutputStaysValidJSON","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_OutputStaysValidJSON\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_OutputStaysValidJSON","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_OutputStaysValidJSON (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_OutputStaysValidJSON","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_DoesNotMutateInputBody"}
- {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_DoesNotMutateInputBody","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_DoesNotMutateInputBody\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_DoesNotMutateInputBody","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_DoesNotMutateInputBody (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_DoesNotMutateInputBody","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_RemovesLookaroundOnly"}
- {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_RemovesLookaroundOnly","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemaPatterns_RemovesLookaroundOnly\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_RemovesLookaroundOnly","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemaPatterns_RemovesLookaroundOnly (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_RemovesLookaroundOnly","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_PreservesRawDocumentRepresentation"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_PreservesRawDocumentRepresentation","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemaPatterns_PreservesRawDocumentRepresentation\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_PreservesRawDocumentRepresentation","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemaPatterns_PreservesRawDocumentRepresentation (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_PreservesRawDocumentRepresentation","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_AllMemberPositions"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_AllMemberPositions","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemaPatterns_AllMemberPositions\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_AllMemberPositions","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemaPatterns_AllMemberPositions (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_AllMemberPositions","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_TraversesConservativeSchemaKeywords"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_TraversesConservativeSchemaKeywords","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemaPatterns_TraversesConservativeSchemaKeywords\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_TraversesConservativeSchemaKeywords","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemaPatterns_TraversesConservativeSchemaKeywords (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_TraversesConservativeSchemaKeywords","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTraverseMessageMetadata"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTraverseMessageMetadata","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTraverseMessageMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTraverseMessageMetadata","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTraverseMessageMetadata (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTraverseMessageMetadata","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DecodesEscapedLookaround"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DecodesEscapedLookaround","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemaPatterns_DecodesEscapedLookaround\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DecodesEscapedLookaround","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemaPatterns_DecodesEscapedLookaround (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DecodesEscapedLookaround","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_EscapedKey"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_EscapedKey","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemaPatterns_EscapedKey\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_EscapedKey","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemaPatterns_EscapedKey (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_EscapedKey","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DuplicateKeysStayValid"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DuplicateKeysStayValid","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemaPatterns_DuplicateKeysStayValid\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DuplicateKeysStayValid","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemaPatterns_DuplicateKeysStayValid (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DuplicateKeysStayValid","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaPlatformGate_APIKeyAndOAuth"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaPlatformGate_APIKeyAndOAuth","Output":"=== RUN TestOpenAIResponsesToolSchemaPlatformGate_APIKeyAndOAuth\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaPlatformGate_APIKeyAndOAuth/apikey"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaPlatformGate_APIKeyAndOAuth/apikey","Output":"=== RUN TestOpenAIResponsesToolSchemaPlatformGate_APIKeyAndOAuth/apikey\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaPlatformGate_APIKeyAndOAuth/apikey","Output":"--- PASS: TestOpenAIResponsesToolSchemaPlatformGate_APIKeyAndOAuth/apikey (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaPlatformGate_APIKeyAndOAuth/apikey","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaPlatformGate_APIKeyAndOAuth/oauth"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaPlatformGate_APIKeyAndOAuth/oauth","Output":"=== RUN TestOpenAIResponsesToolSchemaPlatformGate_APIKeyAndOAuth/oauth\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaPlatformGate_APIKeyAndOAuth/oauth","Output":"--- PASS: TestOpenAIResponsesToolSchemaPlatformGate_APIKeyAndOAuth/oauth (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaPlatformGate_APIKeyAndOAuth/oauth","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaPlatformGate_APIKeyAndOAuth","Output":"--- PASS: TestOpenAIResponsesToolSchemaPlatformGate_APIKeyAndOAuth (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaPlatformGate_APIKeyAndOAuth","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_DepthLimitReturnsOriginal"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_DepthLimitReturnsOriginal","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemas_DepthLimitReturnsOriginal\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_DepthLimitReturnsOriginal","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemas_DepthLimitReturnsOriginal (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_DepthLimitReturnsOriginal","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTouchUserInputPattern"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTouchUserInputPattern","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTouchUserInputPattern\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTouchUserInputPattern","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTouchUserInputPattern (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTouchUserInputPattern","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTraverseInstanceData"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTraverseInstanceData","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTraverseInstanceData\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTraverseInstanceData","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTraverseInstanceData (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTraverseInstanceData","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_RewriteCountIndependentOfHits"}
- {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_RewriteCountIndependentOfHits","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_RewriteCountIndependentOfHits\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_RewriteCountIndependentOfHits","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_RewriteCountIndependentOfHits (0.02s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_RewriteCountIndependentOfHits","Elapsed":0.02}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/fast_alias"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/fast_alias","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/fast_alias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/fast_alias","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/fast_alias (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/fast_alias","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/priority"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/priority","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/priority\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/priority","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/priority (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/priority","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/flex"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/flex","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/flex\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/flex","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/flex (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/flex","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/ultrafast"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/ultrafast","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/ultrafast\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/ultrafast","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/ultrafast (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/ultrafast","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/explicit_default_sentinel"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/explicit_default_sentinel","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/explicit_default_sentinel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/explicit_default_sentinel","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/explicit_default_sentinel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/explicit_default_sentinel","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/omitted_tier"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/omitted_tier","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/omitted_tier\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/omitted_tier","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/omitted_tier (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/omitted_tier","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/auto_is_not_expanded_without_catalog_support"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/auto_is_not_expanded_without_catalog_support","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/auto_is_not_expanded_without_catalog_support\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/auto_is_not_expanded_without_catalog_support","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/auto_is_not_expanded_without_catalog_support (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/auto_is_not_expanded_without_catalog_support","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/scale_is_not_expanded_without_catalog_support"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/scale_is_not_expanded_without_catalog_support","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/scale_is_not_expanded_without_catalog_support\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/scale_is_not_expanded_without_catalog_support","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/scale_is_not_expanded_without_catalog_support (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/scale_is_not_expanded_without_catalog_support","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/unknown_tier_does_not_expand_protocol"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/unknown_tier_does_not_expand_protocol","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/unknown_tier_does_not_expand_protocol\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/unknown_tier_does_not_expand_protocol","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/unknown_tier_does_not_expand_protocol (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/unknown_tier_does_not_expand_protocol","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/invalid_header_value_is_omitted"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/invalid_header_value_is_omitted","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/invalid_header_value_is_omitted\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/invalid_header_value_is_omitted","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/invalid_header_value_is_omitted (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/invalid_header_value_is_omitted","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/delimiter_in_model_is_omitted:_gpt-5.6;evil"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/delimiter_in_model_is_omitted:_gpt-5.6;evil","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/delimiter_in_model_is_omitted:_gpt-5.6;evil\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/delimiter_in_model_is_omitted:_gpt-5.6;evil","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/delimiter_in_model_is_omitted:_gpt-5.6;evil (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/delimiter_in_model_is_omitted:_gpt-5.6;evil","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/delimiter_in_model_is_omitted:_gpt=5.6"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/delimiter_in_model_is_omitted:_gpt=5.6","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/delimiter_in_model_is_omitted:_gpt=5.6\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/delimiter_in_model_is_omitted:_gpt=5.6","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/delimiter_in_model_is_omitted:_gpt=5.6 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/delimiter_in_model_is_omitted:_gpt=5.6","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/api_key_strips_gateway-owned_hint_in_every_key_casing"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/api_key_strips_gateway-owned_hint_in_every_key_casing","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/api_key_strips_gateway-owned_hint_in_every_key_casing\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/api_key_strips_gateway-owned_hint_in_every_key_casing","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/api_key_strips_gateway-owned_hint_in_every_key_casing (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/api_key_strips_gateway-owned_hint_in_every_key_casing","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/oauth_replaces_spoofed_lowercase_hint"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/oauth_replaces_spoofed_lowercase_hint","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/oauth_replaces_spoofed_lowercase_hint\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/oauth_replaces_spoofed_lowercase_hint","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/oauth_replaces_spoofed_lowercase_hint (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/oauth_replaces_spoofed_lowercase_hint","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody","Output":"=== RUN TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast","Output":"=== RUN TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast/ordinary"}
- {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast/ordinary","Output":"=== RUN TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast/ordinary\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast/ordinary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.136Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":0,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"priority\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast/ordinary","Output":"--- PASS: TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast/ordinary (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast/ordinary","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast/passthrough"}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast/passthrough","Output":"=== RUN TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast/passthrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast/passthrough","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.136Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":0,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"priority\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast/passthrough","Output":"--- PASS: TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast/passthrough (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast/passthrough","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast","Output":"--- PASS: TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex"}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex","Output":"=== RUN TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex/ordinary"}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex/ordinary","Output":"=== RUN TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex/ordinary\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex/ordinary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.136Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":0,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"flex\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex/ordinary","Output":"--- PASS: TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex/ordinary (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex/ordinary","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex/passthrough"}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex/passthrough","Output":"=== RUN TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex/passthrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex/passthrough","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.136Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":0,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"flex\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex/passthrough","Output":"--- PASS: TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex/passthrough (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex/passthrough","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex","Output":"--- PASS: TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast"}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast","Output":"=== RUN TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast/ordinary"}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast/ordinary","Output":"=== RUN TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast/ordinary\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast/ordinary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.136Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":0,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"ultrafast\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast/ordinary","Output":"--- PASS: TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast/ordinary (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast/ordinary","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast/passthrough"}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast/passthrough","Output":"=== RUN TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast/passthrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast/passthrough","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.136Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":0,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"ultrafast\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast/passthrough","Output":"--- PASS: TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast/passthrough (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast/passthrough","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast","Output":"--- PASS: TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default"}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default","Output":"=== RUN TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default/ordinary"}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default/ordinary","Output":"=== RUN TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default/ordinary\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default/ordinary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.136Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":0,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"default\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default/ordinary","Output":"--- PASS: TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default/ordinary (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default/ordinary","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default/passthrough"}
- {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default/passthrough","Output":"=== RUN TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default/passthrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1367867+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default/passthrough","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.136Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":0,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"default\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default/passthrough","Output":"--- PASS: TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default/passthrough (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default/passthrough","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default","Output":"--- PASS: TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted"}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted","Output":"=== RUN TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted/ordinary"}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted/ordinary","Output":"=== RUN TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted/ordinary\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted/ordinary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.136Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":0,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted/ordinary","Output":"--- PASS: TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted/ordinary (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted/ordinary","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted/passthrough"}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted/passthrough","Output":"=== RUN TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted/passthrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted/passthrough","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.136Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":0,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted/passthrough","Output":"--- PASS: TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted/passthrough (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted/passthrough","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted","Output":"--- PASS: TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody","Output":"--- PASS: TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta"}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta","Output":"=== RUN TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/oauth_legacy_only_is_removed_including_raw_lowercase_key"}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/oauth_legacy_only_is_removed_including_raw_lowercase_key","Output":"=== RUN TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/oauth_legacy_only_is_removed_including_raw_lowercase_key\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/oauth_legacy_only_is_removed_including_raw_lowercase_key","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.136Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":0,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"priority\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/oauth_legacy_only_is_removed_including_raw_lowercase_key","Output":"--- PASS: TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/oauth_legacy_only_is_removed_including_raw_lowercase_key (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/oauth_legacy_only_is_removed_including_raw_lowercase_key","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/oauth_mixed_beta_preserves_independent_tokens"}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/oauth_mixed_beta_preserves_independent_tokens","Output":"=== RUN TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/oauth_mixed_beta_preserves_independent_tokens\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/oauth_mixed_beta_preserves_independent_tokens","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.136Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":0,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"priority\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/oauth_mixed_beta_preserves_independent_tokens","Output":"--- PASS: TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/oauth_mixed_beta_preserves_independent_tokens (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/oauth_mixed_beta_preserves_independent_tokens","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/api_key_explicit_beta_remains_caller_controlled"}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/api_key_explicit_beta_remains_caller_controlled","Output":"=== RUN TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/api_key_explicit_beta_remains_caller_controlled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/api_key_explicit_beta_remains_caller_controlled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.136Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":0,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"priority\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/api_key_explicit_beta_remains_caller_controlled","Output":"--- PASS: TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/api_key_explicit_beta_remains_caller_controlled (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/api_key_explicit_beta_remains_caller_controlled","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta","Output":"--- PASS: TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeadersSendsOAuthRoutingHintOnly"}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeadersSendsOAuthRoutingHintOnly","Output":"=== RUN TestBuildOpenAIWSHeadersSendsOAuthRoutingHintOnly\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeadersSendsOAuthRoutingHintOnly","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.136Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":0,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"priority\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeadersSendsOAuthRoutingHintOnly","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.137Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":0,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"ultrafast\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeadersSendsOAuthRoutingHintOnly","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.137Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":0,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"default\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeadersSendsOAuthRoutingHintOnly","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.137Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":0,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"priority\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeadersSendsOAuthRoutingHintOnly","Output":"--- PASS: TestBuildOpenAIWSHeadersSendsOAuthRoutingHintOnly (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeadersSendsOAuthRoutingHintOnly","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRoutingDiagnosticsUseFinalDerivedValuesOnly"}
- {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRoutingDiagnosticsUseFinalDerivedValuesOnly","Output":"=== RUN TestOpenAIRoutingDiagnosticsUseFinalDerivedValuesOnly\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRoutingDiagnosticsUseFinalDerivedValuesOnly","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.137Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":917,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"priority\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRoutingDiagnosticsUseFinalDerivedValuesOnly","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.137Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":917,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"priority\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRoutingDiagnosticsUseFinalDerivedValuesOnly","Output":"--- PASS: TestOpenAIRoutingDiagnosticsUseFinalDerivedValuesOnly (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRoutingDiagnosticsUseFinalDerivedValuesOnly","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPoolPreferredContinuationIgnoresRoutingHintChanges"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPoolPreferredContinuationIgnoresRoutingHintChanges","Output":"=== RUN TestOpenAIWSConnPoolPreferredContinuationIgnoresRoutingHintChanges\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPoolPreferredContinuationIgnoresRoutingHintChanges","Output":"--- PASS: TestOpenAIWSConnPoolPreferredContinuationIgnoresRoutingHintChanges (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPoolPreferredContinuationIgnoresRoutingHintChanges","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPoolUsesRoutingHintAsSoftDialAffinity"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPoolUsesRoutingHintAsSoftDialAffinity","Output":"=== RUN TestOpenAIWSConnPoolUsesRoutingHintAsSoftDialAffinity\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPoolUsesRoutingHintAsSoftDialAffinity","Output":"--- PASS: TestOpenAIWSConnPoolUsesRoutingHintAsSoftDialAffinity (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPoolUsesRoutingHintAsSoftDialAffinity","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike","Output":"=== RUN TestIsOpenAIOAuthLike\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/openai_oauth"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/openai_oauth","Output":"=== RUN TestIsOpenAIOAuthLike/openai_oauth\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/openai_oauth","Output":"--- PASS: TestIsOpenAIOAuthLike/openai_oauth (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/openai_oauth","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/openai_setup_token"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/openai_setup_token","Output":"=== RUN TestIsOpenAIOAuthLike/openai_setup_token\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/openai_setup_token","Output":"--- PASS: TestIsOpenAIOAuthLike/openai_setup_token (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/openai_setup_token","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/openai_api_key"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/openai_api_key","Output":"=== RUN TestIsOpenAIOAuthLike/openai_api_key\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/openai_api_key","Output":"--- PASS: TestIsOpenAIOAuthLike/openai_api_key (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/openai_api_key","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/anthropic_setup_token"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/anthropic_setup_token","Output":"=== RUN TestIsOpenAIOAuthLike/anthropic_setup_token\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/anthropic_setup_token","Output":"--- PASS: TestIsOpenAIOAuthLike/anthropic_setup_token (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/anthropic_setup_token","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/grok_setup_token"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/grok_setup_token","Output":"=== RUN TestIsOpenAIOAuthLike/grok_setup_token\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/grok_setup_token","Output":"--- PASS: TestIsOpenAIOAuthLike/grok_setup_token (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/grok_setup_token","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/nil"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/nil","Output":"=== RUN TestIsOpenAIOAuthLike/nil\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/nil","Output":"--- PASS: TestIsOpenAIOAuthLike/nil (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/nil","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike","Output":"--- PASS: TestIsOpenAIOAuthLike (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceGetAccessTokenSetupToken"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceGetAccessTokenSetupToken","Output":"=== RUN TestOpenAIGatewayServiceGetAccessTokenSetupToken\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceGetAccessTokenSetupToken","Output":"--- PASS: TestOpenAIGatewayServiceGetAccessTokenSetupToken (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceGetAccessTokenSetupToken","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenImagesUsesOAuthResponsesPath"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenImagesUsesOAuthResponsesPath","Output":"=== RUN TestOpenAISetupTokenImagesUsesOAuthResponsesPath\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenImagesUsesOAuthResponsesPath","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:49.137Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 endpoint=/v1/images/generations account_type=setup-token uploads=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenImagesUsesOAuthResponsesPath","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.137Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":73,\"final_model\":\"gpt-5.6-luna\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenImagesUsesOAuthResponsesPath","Output":"--- PASS: TestOpenAISetupTokenImagesUsesOAuthResponsesPath (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenImagesUsesOAuthResponsesPath","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenWSCompatibility"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenWSCompatibility","Output":"=== RUN TestOpenAISetupTokenWSCompatibility\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenWSCompatibility","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.137Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":0,\"final_model\":\"gpt-5.1-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenWSCompatibility","Output":"--- PASS: TestOpenAISetupTokenWSCompatibility (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenWSCompatibility","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenChatCompletionsUsesCodexTransform"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenChatCompletionsUsesCodexTransform","Output":"=== RUN TestOpenAISetupTokenChatCompletionsUsesCodexTransform\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenChatCompletionsUsesCodexTransform","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.137Z\",\"msg\":\"openai chat_completions: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":71,\"original_model\":\"gpt-5.4\",\"billing_model\":\"gpt-5.4\",\"upstream_model\":\"gpt-5.4\",\"stream\":false,\"responses_shape\":false,\"compat_prompt_cache_key_injected\":true,\"compat_prompt_cache_key_sha256\":\"9717875cd9aa4b57\"}\n"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenChatCompletionsUsesCodexTransform","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.137Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":71,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenChatCompletionsUsesCodexTransform","Output":"--- PASS: TestOpenAISetupTokenChatCompletionsUsesCodexTransform (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenChatCompletionsUsesCodexTransform","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenMessagesUsesCodexBridgeAndTurnState"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenMessagesUsesCodexBridgeAndTurnState","Output":"=== RUN TestOpenAISetupTokenMessagesUsesCodexBridgeAndTurnState\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenMessagesUsesCodexBridgeAndTurnState","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.137Z\",\"msg\":\"openai messages: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":72,\"original_model\":\"claude-sonnet-4-5\",\"normalized_model\":\"claude-sonnet-4-5\",\"billing_model\":\"gpt-5.4\",\"upstream_model\":\"gpt-5.4\",\"stream\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1386618+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenMessagesUsesCodexBridgeAndTurnState","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.138Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":72,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:49.1386618+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenMessagesUsesCodexBridgeAndTurnState","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.138Z\",\"msg\":\"openai messages: upstream identity restored\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":72,\"upstream_model\":\"gpt-5.4\",\"compat_identity_restored\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1386618+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenMessagesUsesCodexBridgeAndTurnState","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.138Z\",\"msg\":\"openai messages: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":72,\"original_model\":\"claude-sonnet-4-5\",\"normalized_model\":\"claude-sonnet-4-5\",\"billing_model\":\"gpt-5.4\",\"upstream_model\":\"gpt-5.4\",\"stream\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1391649+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenMessagesUsesCodexBridgeAndTurnState","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.138Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":72,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:49.1391649+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenMessagesUsesCodexBridgeAndTurnState","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.138Z\",\"msg\":\"openai messages: upstream identity restored\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":72,\"upstream_model\":\"gpt-5.4\",\"compat_identity_restored\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1391649+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenMessagesUsesCodexBridgeAndTurnState","Output":"--- PASS: TestOpenAISetupTokenMessagesUsesCodexBridgeAndTurnState (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1391649+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenMessagesUsesCodexBridgeAndTurnState","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1391649+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingRepairsConcatenatedJSONDocumentsInSingleDataLine"}
- {"Time":"2026-09-12T11:38:49.1391649+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingRepairsConcatenatedJSONDocumentsInSingleDataLine","Output":"=== RUN TestOpenAIStreamingRepairsConcatenatedJSONDocumentsInSingleDataLine\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1407008+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingRepairsConcatenatedJSONDocumentsInSingleDataLine","Output":"--- PASS: TestOpenAIStreamingRepairsConcatenatedJSONDocumentsInSingleDataLine (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1407008+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingRepairsConcatenatedJSONDocumentsInSingleDataLine","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1407008+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingAsyncScannerRepairsConcatenatedJSONDocumentsInSingleDataLine"}
- {"Time":"2026-09-12T11:38:49.1407008+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingAsyncScannerRepairsConcatenatedJSONDocumentsInSingleDataLine","Output":"=== RUN TestOpenAIStreamingAsyncScannerRepairsConcatenatedJSONDocumentsInSingleDataLine\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1430071+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingAsyncScannerRepairsConcatenatedJSONDocumentsInSingleDataLine","Output":"--- PASS: TestOpenAIStreamingAsyncScannerRepairsConcatenatedJSONDocumentsInSingleDataLine (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1430071+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingAsyncScannerRepairsConcatenatedJSONDocumentsInSingleDataLine","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1430071+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughRepairsConcatenatedJSONDocumentsInSingleDataLine"}
- {"Time":"2026-09-12T11:38:49.1430071+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughRepairsConcatenatedJSONDocumentsInSingleDataLine","Output":"=== RUN TestOpenAIStreamingPassthroughRepairsConcatenatedJSONDocumentsInSingleDataLine\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1442217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughRepairsConcatenatedJSONDocumentsInSingleDataLine","Output":"--- PASS: TestOpenAIStreamingPassthroughRepairsConcatenatedJSONDocumentsInSingleDataLine (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1442217+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughRepairsConcatenatedJSONDocumentsInSingleDataLine","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1442217+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage"}
- {"Time":"2026-09-12T11:38:49.1442217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Output":"=== RUN TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1442217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.144Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=2 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.6-sol stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1442217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.144Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=2 account_type=apikey model=gpt-5.6-sol stream=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1442217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.144Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=2 account_type=apikey ws_host=api.openai.com ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1442217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:49.144Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=2 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=78 payload_key_sizes=type:15,model:11,input:5,stream:1 input_summary=- stream=true payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1447937+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.144Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":2,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:49.1447937+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.144Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=2 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=- header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1447937+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.144Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=2 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_2_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1447937+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.144Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=2 conn_id=oa_ws_2_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1447937+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.144Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=2 conn_id=oa_ws_2_1 stream=true payload_bytes=78 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1452974+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:49.144Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] concatenated_json_repaired account_id=2 conn_id=oa_ws_2_1 documents=2 bytes=68274\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1456807+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.145Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=2 conn_id=oa_ws_2_1 idx=1 type=response.in_progress bytes=68106 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1456807+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.145Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] buffer_enqueue account_id=2 conn_id=oa_ws_2_1 idx=1 event_idx=1 event_type=response.in_progress buffer_size=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1456807+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.145Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=2 conn_id=oa_ws_2_1 idx=2 type=response.output_item.added bytes=168 token=false terminal=false buffered_pending=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1456807+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.145Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] buffer_enqueue account_id=2 conn_id=oa_ws_2_1 idx=2 event_idx=2 event_type=response.output_item.added buffer_size=2\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1456807+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.145Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=2 conn_id=oa_ws_2_1 idx=3 type=response.completed bytes=158 token=false terminal=true buffered_pending=2\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1456807+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.145Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] buffer_flush account_id=2 conn_id=oa_ws_2_1 reason=response.completed flushed=2 total_flushed=2 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1456807+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.145Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=2 conn_id=oa_ws_2_1 response_id=resp_large stream=true duration_ms=1 events=3 token_events=0 terminal_events=1 buffered_events=2 buffered_flushed=2 first_event=response.in_progress last_event=response.completed first_token_ms=-1 wrote_downstream=true client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1456807+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.145Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=2 request_id=resp_large stream=true has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1461827+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Output":"--- PASS: TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1461827+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1461827+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedTypedEventBeforeWritingDownstream"}
- {"Time":"2026-09-12T11:38:49.1461827+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedTypedEventBeforeWritingDownstream","Output":"=== RUN TestOpenAIWSv2RejectsMalformedTypedEventBeforeWritingDownstream\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1477121+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedTypedEventBeforeWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.146Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=4 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.6-sol stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1477121+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedTypedEventBeforeWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.146Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=4 account_type=apikey model=gpt-5.6-sol stream=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1477121+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedTypedEventBeforeWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.146Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=4 account_type=apikey ws_host=api.openai.com ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1477121+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedTypedEventBeforeWritingDownstream","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:49.147Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=4 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=78 payload_key_sizes=type:15,model:11,input:5,stream:1 input_summary=- stream=true payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1477121+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedTypedEventBeforeWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.147Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":4,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:49.1477121+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedTypedEventBeforeWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.147Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=4 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=- header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1477121+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedTypedEventBeforeWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.147Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=4 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_4_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1477121+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedTypedEventBeforeWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.147Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=4 conn_id=oa_ws_4_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1477121+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedTypedEventBeforeWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.147Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=4 conn_id=oa_ws_4_1 stream=true payload_bytes=78 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1592271+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedTypedEventBeforeWritingDownstream","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:49.159Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] invalid_event_json account_id=4 conn_id=oa_ws_4_1 event_type=response.in_progress bytes=68121 wrote_downstream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1592271+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedTypedEventBeforeWritingDownstream","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:49.159Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_stop account_id=4 attempt=1 reason=invalid_event_json\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1592271+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedTypedEventBeforeWritingDownstream","Output":"--- PASS: TestOpenAIWSv2RejectsMalformedTypedEventBeforeWritingDownstream (0.01s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1592271+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedTypedEventBeforeWritingDownstream","Elapsed":0.01}
- {"Time":"2026-09-12T11:38:49.1592271+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedUntypedMessageBeforeWritingDownstream"}
- {"Time":"2026-09-12T11:38:49.1592271+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedUntypedMessageBeforeWritingDownstream","Output":"=== RUN TestOpenAIWSv2RejectsMalformedUntypedMessageBeforeWritingDownstream\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1592271+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedUntypedMessageBeforeWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.159Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=4 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.6-sol stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1602232+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedUntypedMessageBeforeWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.160Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=4 account_type=apikey model=gpt-5.6-sol stream=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1607262+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedUntypedMessageBeforeWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.160Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=4 account_type=apikey ws_host=api.openai.com ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1607262+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedUntypedMessageBeforeWritingDownstream","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:49.160Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=4 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=78 payload_key_sizes=type:15,model:11,input:5,stream:1 input_summary=- stream=true payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1607262+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedUntypedMessageBeforeWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.160Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":4,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedUntypedMessageBeforeWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.160Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=4 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=- header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedUntypedMessageBeforeWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.160Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=4 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_4_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedUntypedMessageBeforeWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.160Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=4 conn_id=oa_ws_4_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedUntypedMessageBeforeWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.160Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=4 conn_id=oa_ws_4_1 stream=true payload_bytes=78 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedUntypedMessageBeforeWritingDownstream","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:49.160Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] invalid_event_json account_id=4 conn_id=oa_ws_4_1 event_type=unknown bytes=8 wrote_downstream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedUntypedMessageBeforeWritingDownstream","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:49.160Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_stop account_id=4 attempt=1 reason=invalid_event_json\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedUntypedMessageBeforeWritingDownstream","Output":"--- PASS: TestOpenAIWSv2RejectsMalformedUntypedMessageBeforeWritingDownstream (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedUntypedMessageBeforeWritingDownstream","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedEventAfterWritingDownstream"}
- {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedEventAfterWritingDownstream","Output":"=== RUN TestOpenAIWSv2RejectsMalformedEventAfterWritingDownstream\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedEventAfterWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.160Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=5 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.6-sol stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedEventAfterWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.160Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=5 account_type=apikey model=gpt-5.6-sol stream=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedEventAfterWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.160Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=5 account_type=apikey ws_host=api.openai.com ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedEventAfterWritingDownstream","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:49.160Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=5 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=78 payload_key_sizes=type:15,model:11,input:5,stream:1 input_summary=- stream=true payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedEventAfterWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.160Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":5,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedEventAfterWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.160Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=5 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=- header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedEventAfterWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.160Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=5 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_5_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedEventAfterWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.160Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=5 conn_id=oa_ws_5_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedEventAfterWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.160Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=5 conn_id=oa_ws_5_1 stream=true payload_bytes=78 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedEventAfterWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.160Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=5 conn_id=oa_ws_5_1 idx=1 type=response.output_text.delta bytes=70 token=true terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedEventAfterWritingDownstream","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:49.161Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] invalid_event_json account_id=5 conn_id=oa_ws_5_1 event_type=response.in_progress bytes=46 wrote_downstream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedEventAfterWritingDownstream","Output":"--- PASS: TestOpenAIWSv2RejectsMalformedEventAfterWritingDownstream (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedEventAfterWritingDownstream","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSplitOpenAIConcatenatedJSONDocumentsRejectsPayloadOverRepairLimit"}
- {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSplitOpenAIConcatenatedJSONDocumentsRejectsPayloadOverRepairLimit","Output":"=== RUN TestSplitOpenAIConcatenatedJSONDocumentsRejectsPayloadOverRepairLimit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2489035+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSplitOpenAIConcatenatedJSONDocumentsRejectsPayloadOverRepairLimit","Output":"--- PASS: TestSplitOpenAIConcatenatedJSONDocumentsRejectsPayloadOverRepairLimit (0.09s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2489035+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSplitOpenAIConcatenatedJSONDocumentsRejectsPayloadOverRepairLimit","Elapsed":0.09}
- {"Time":"2026-09-12T11:38:49.2489035+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingBreaksConnectionWhenTerminalHasTrailingDocument"}
- {"Time":"2026-09-12T11:38:49.2489035+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingBreaksConnectionWhenTerminalHasTrailingDocument","Output":"=== RUN TestOpenAIWSv2StreamingBreaksConnectionWhenTerminalHasTrailingDocument\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2489035+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingBreaksConnectionWhenTerminalHasTrailingDocument","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.248Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=3 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.6-sol stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.2489035+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingBreaksConnectionWhenTerminalHasTrailingDocument","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.248Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=3 account_type=apikey model=gpt-5.6-sol stream=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.2489035+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingBreaksConnectionWhenTerminalHasTrailingDocument","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.248Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=3 account_type=apikey ws_host=api.openai.com ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.2489035+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingBreaksConnectionWhenTerminalHasTrailingDocument","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:49.248Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=3 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=78 payload_key_sizes=type:15,model:11,input:5,stream:1 input_summary=- stream=true payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.2489035+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingBreaksConnectionWhenTerminalHasTrailingDocument","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.248Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":3,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:49.2489035+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingBreaksConnectionWhenTerminalHasTrailingDocument","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.248Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=3 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=- header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.2489035+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingBreaksConnectionWhenTerminalHasTrailingDocument","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.248Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=3 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_3_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.2489035+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingBreaksConnectionWhenTerminalHasTrailingDocument","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.248Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=3 conn_id=oa_ws_3_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.2489035+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingBreaksConnectionWhenTerminalHasTrailingDocument","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.248Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=3 conn_id=oa_ws_3_1 stream=true payload_bytes=78 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.2489035+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingBreaksConnectionWhenTerminalHasTrailingDocument","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:49.248Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] concatenated_json_repaired account_id=3 conn_id=oa_ws_3_1 documents=2 bytes=180\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingBreaksConnectionWhenTerminalHasTrailingDocument","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.248Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=3 conn_id=oa_ws_3_1 idx=1 type=response.completed bytes=113 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingBreaksConnectionWhenTerminalHasTrailingDocument","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.248Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=3 conn_id=oa_ws_3_1 response_id=resp_terminal_tail stream=true duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=true client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingBreaksConnectionWhenTerminalHasTrailingDocument","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.248Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=3 request_id=resp_terminal_tail stream=true has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingBreaksConnectionWhenTerminalHasTrailingDocument","Output":"--- PASS: TestOpenAIWSv2StreamingBreaksConnectionWhenTerminalHasTrailingDocument (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingBreaksConnectionWhenTerminalHasTrailingDocument","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSnapshotOpenAICompatibilityFallbackMetrics"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSnapshotOpenAICompatibilityFallbackMetrics","Output":"=== RUN TestSnapshotOpenAICompatibilityFallbackMetrics\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSnapshotOpenAICompatibilityFallbackMetrics","Output":"--- PASS: TestSnapshotOpenAICompatibilityFallbackMetrics (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSnapshotOpenAICompatibilityFallbackMetrics","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope","Output":"=== RUN TestOpenAICompatibleModelNotFound400FailoverScope\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope/openai_api_key"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope/openai_api_key","Output":"=== RUN TestOpenAICompatibleModelNotFound400FailoverScope/openai_api_key\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope/openai_api_key","Output":"--- PASS: TestOpenAICompatibleModelNotFound400FailoverScope/openai_api_key (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope/openai_api_key","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope/compatible_provider"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope/compatible_provider","Output":"=== RUN TestOpenAICompatibleModelNotFound400FailoverScope/compatible_provider\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope/compatible_provider","Output":"--- PASS: TestOpenAICompatibleModelNotFound400FailoverScope/compatible_provider (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope/compatible_provider","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope/anthropic_account"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope/anthropic_account","Output":"=== RUN TestOpenAICompatibleModelNotFound400FailoverScope/anthropic_account\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope/anthropic_account","Output":"--- PASS: TestOpenAICompatibleModelNotFound400FailoverScope/anthropic_account (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope/anthropic_account","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope/missing_account"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope/missing_account","Output":"=== RUN TestOpenAICompatibleModelNotFound400FailoverScope/missing_account\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope/missing_account","Output":"--- PASS: TestOpenAICompatibleModelNotFound400FailoverScope/missing_account (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope/missing_account","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope","Output":"--- PASS: TestOpenAICompatibleModelNotFound400FailoverScope (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400WithoutManagedCandidatesRemainsTerminal"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400WithoutManagedCandidatesRemainsTerminal","Output":"=== RUN TestOpenAICompatibleModelNotFound400WithoutManagedCandidatesRemainsTerminal\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400WithoutManagedCandidatesRemainsTerminal","Output":"--- PASS: TestOpenAICompatibleModelNotFound400WithoutManagedCandidatesRemainsTerminal (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400WithoutManagedCandidatesRemainsTerminal","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFailoverOpenAIUpstreamHTTPError_ModelNotFoundIsNextAccountEligible"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFailoverOpenAIUpstreamHTTPError_ModelNotFoundIsNextAccountEligible","Output":"=== RUN TestFailoverOpenAIUpstreamHTTPError_ModelNotFoundIsNextAccountEligible\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFailoverOpenAIUpstreamHTTPError_ModelNotFoundIsNextAccountEligible","Output":"--- PASS: TestFailoverOpenAIUpstreamHTTPError_ModelNotFoundIsNextAccountEligible (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFailoverOpenAIUpstreamHTTPError_ModelNotFoundIsNextAccountEligible","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIDeterministicClientError"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIDeterministicClientError","Output":"=== RUN TestIsOpenAIDeterministicClientError\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIDeterministicClientError","Output":"--- PASS: TestIsOpenAIDeterministicClientError (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIDeterministicClientError","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape","Output":"=== RUN TestWriteOpenAIUpstreamClientError_PayloadShape\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape/full_metadata"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape/full_metadata","Output":"=== RUN TestWriteOpenAIUpstreamClientError_PayloadShape/full_metadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape/full_metadata","Output":"--- PASS: TestWriteOpenAIUpstreamClientError_PayloadShape/full_metadata (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape/full_metadata","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape/upstream_type_preserved"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape/upstream_type_preserved","Output":"=== RUN TestWriteOpenAIUpstreamClientError_PayloadShape/upstream_type_preserved\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape/upstream_type_preserved","Output":"--- PASS: TestWriteOpenAIUpstreamClientError_PayloadShape/upstream_type_preserved (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape/upstream_type_preserved","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape/empty_body_falls_back"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape/empty_body_falls_back","Output":"=== RUN TestWriteOpenAIUpstreamClientError_PayloadShape/empty_body_falls_back\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape/empty_body_falls_back","Output":"--- PASS: TestWriteOpenAIUpstreamClientError_PayloadShape/empty_body_falls_back (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape/empty_body_falls_back","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape/sanitized_message_wins_over_raw_body"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape/sanitized_message_wins_over_raw_body","Output":"=== RUN TestWriteOpenAIUpstreamClientError_PayloadShape/sanitized_message_wins_over_raw_body\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape/sanitized_message_wins_over_raw_body","Output":"--- PASS: TestWriteOpenAIUpstreamClientError_PayloadShape/sanitized_message_wins_over_raw_body (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape/sanitized_message_wins_over_raw_body","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape","Output":"--- PASS: TestWriteOpenAIUpstreamClientError_PayloadShape (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification","Output":"=== RUN TestOpenAIVisibleOutputClassification\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/keepalive"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/keepalive","Output":"=== RUN TestOpenAIVisibleOutputClassification/keepalive\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/keepalive","Output":"--- PASS: TestOpenAIVisibleOutputClassification/keepalive (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/keepalive","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/created"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/created","Output":"=== RUN TestOpenAIVisibleOutputClassification/created\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/created","Output":"--- PASS: TestOpenAIVisibleOutputClassification/created (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/created","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/empty_output_item"}
- {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/empty_output_item","Output":"=== RUN TestOpenAIVisibleOutputClassification/empty_output_item\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/empty_output_item","Output":"--- PASS: TestOpenAIVisibleOutputClassification/empty_output_item (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/empty_output_item","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/empty_delta"}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/empty_delta","Output":"=== RUN TestOpenAIVisibleOutputClassification/empty_delta\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/empty_delta","Output":"--- PASS: TestOpenAIVisibleOutputClassification/empty_delta (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/empty_delta","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/text_delta"}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/text_delta","Output":"=== RUN TestOpenAIVisibleOutputClassification/text_delta\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/text_delta","Output":"--- PASS: TestOpenAIVisibleOutputClassification/text_delta (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/text_delta","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/tool_arguments"}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/tool_arguments","Output":"=== RUN TestOpenAIVisibleOutputClassification/tool_arguments\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/tool_arguments","Output":"--- PASS: TestOpenAIVisibleOutputClassification/tool_arguments (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/tool_arguments","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/partial_image"}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/partial_image","Output":"=== RUN TestOpenAIVisibleOutputClassification/partial_image\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/partial_image","Output":"--- PASS: TestOpenAIVisibleOutputClassification/partial_image (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/partial_image","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/completed_image_item"}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/completed_image_item","Output":"=== RUN TestOpenAIVisibleOutputClassification/completed_image_item\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/completed_image_item","Output":"--- PASS: TestOpenAIVisibleOutputClassification/completed_image_item (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/completed_image_item","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/empty_completed"}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/empty_completed","Output":"=== RUN TestOpenAIVisibleOutputClassification/empty_completed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/empty_completed","Output":"--- PASS: TestOpenAIVisibleOutputClassification/empty_completed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/empty_completed","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/completed_with_output_usage_only"}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/completed_with_output_usage_only","Output":"=== RUN TestOpenAIVisibleOutputClassification/completed_with_output_usage_only\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/completed_with_output_usage_only","Output":"--- PASS: TestOpenAIVisibleOutputClassification/completed_with_output_usage_only (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/completed_with_output_usage_only","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/completed_with_text"}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/completed_with_text","Output":"=== RUN TestOpenAIVisibleOutputClassification/completed_with_text\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/completed_with_text","Output":"--- PASS: TestOpenAIVisibleOutputClassification/completed_with_text (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/completed_with_text","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/done_marker"}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/done_marker","Output":"=== RUN TestOpenAIVisibleOutputClassification/done_marker\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/done_marker","Output":"--- PASS: TestOpenAIVisibleOutputClassification/done_marker (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/done_marker","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification","Output":"--- PASS: TestOpenAIVisibleOutputClassification (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification","Elapsed":0}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtVisibleOutput"}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtVisibleOutput","Output":"=== RUN TestOpenAIResponsesTTFTStartsAtVisibleOutput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtVisibleOutput/native"}
- {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtVisibleOutput/native","Output":"=== RUN TestOpenAIResponsesTTFTStartsAtVisibleOutput/native\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.3717632+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtVisibleOutput/native","Output":"--- PASS: TestOpenAIResponsesTTFTStartsAtVisibleOutput/native (0.12s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.3717632+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtVisibleOutput/native","Elapsed":0.12}
- {"Time":"2026-09-12T11:38:49.3717632+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtVisibleOutput/passthrough"}
- {"Time":"2026-09-12T11:38:49.3717632+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtVisibleOutput/passthrough","Output":"=== RUN TestOpenAIResponsesTTFTStartsAtVisibleOutput/passthrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.4965607+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtVisibleOutput/passthrough","Output":"--- PASS: TestOpenAIResponsesTTFTStartsAtVisibleOutput/passthrough (0.12s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.4965607+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtVisibleOutput/passthrough","Elapsed":0.12}
- {"Time":"2026-09-12T11:38:49.4965607+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtVisibleOutput","Output":"--- PASS: TestOpenAIResponsesTTFTStartsAtVisibleOutput (0.25s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.4965607+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtVisibleOutput","Elapsed":0.25}
- {"Time":"2026-09-12T11:38:49.4965607+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtCompletedImage"}
- {"Time":"2026-09-12T11:38:49.4965607+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtCompletedImage","Output":"=== RUN TestOpenAIResponsesTTFTStartsAtCompletedImage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.4965607+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtCompletedImage/native"}
- {"Time":"2026-09-12T11:38:49.4965607+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtCompletedImage/native","Output":"=== RUN TestOpenAIResponsesTTFTStartsAtCompletedImage/native\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.6172919+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtCompletedImage/native","Output":"--- PASS: TestOpenAIResponsesTTFTStartsAtCompletedImage/native (0.12s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.6172919+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtCompletedImage/native","Elapsed":0.12}
- {"Time":"2026-09-12T11:38:49.6172919+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtCompletedImage/passthrough"}
- {"Time":"2026-09-12T11:38:49.6172919+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtCompletedImage/passthrough","Output":"=== RUN TestOpenAIResponsesTTFTStartsAtCompletedImage/passthrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.7375211+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtCompletedImage/passthrough","Output":"--- PASS: TestOpenAIResponsesTTFTStartsAtCompletedImage/passthrough (0.12s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.7375211+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtCompletedImage/passthrough","Elapsed":0.12}
- {"Time":"2026-09-12T11:38:49.7375211+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtCompletedImage","Output":"--- PASS: TestOpenAIResponsesTTFTStartsAtCompletedImage (0.24s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:49.7375211+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtCompletedImage","Elapsed":0.24}
- {"Time":"2026-09-12T11:38:49.7375211+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeMetadataDoesNotDisarmFirstOutputTimeout"}
- {"Time":"2026-09-12T11:38:49.7375211+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeMetadataDoesNotDisarmFirstOutputTimeout","Output":"=== RUN TestOpenAINativeMetadataDoesNotDisarmFirstOutputTimeout\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:50.7380138+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeMetadataDoesNotDisarmFirstOutputTimeout","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:50.738Z\",\"msg\":\"OpenAI first output timeout: account=1 model=test-model effort= phase=semantic_output elapsed=1.0004927s limit=1s\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:50.9378677+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeMetadataDoesNotDisarmFirstOutputTimeout","Output":"--- PASS: TestOpenAINativeMetadataDoesNotDisarmFirstOutputTimeout (1.20s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:50.9378677+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeMetadataDoesNotDisarmFirstOutputTimeout","Elapsed":1.2}
- {"Time":"2026-09-12T11:38:50.9378677+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTDefaultsToSemanticOutput"}
- {"Time":"2026-09-12T11:38:50.9378677+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTDefaultsToSemanticOutput","Output":"=== RUN TestOpenAIResponsesTTFTDefaultsToSemanticOutput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:50.9378677+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTDefaultsToSemanticOutput/native"}
- {"Time":"2026-09-12T11:38:50.9378677+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTDefaultsToSemanticOutput/native","Output":"=== RUN TestOpenAIResponsesTTFTDefaultsToSemanticOutput/native\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.0581713+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTDefaultsToSemanticOutput/native","Output":"--- PASS: TestOpenAIResponsesTTFTDefaultsToSemanticOutput/native (0.12s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.0581713+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTDefaultsToSemanticOutput/native","Elapsed":0.12}
- {"Time":"2026-09-12T11:38:51.0581713+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTDefaultsToSemanticOutput/passthrough"}
- {"Time":"2026-09-12T11:38:51.0581713+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTDefaultsToSemanticOutput/passthrough","Output":"=== RUN TestOpenAIResponsesTTFTDefaultsToSemanticOutput/passthrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.1786147+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTDefaultsToSemanticOutput/passthrough","Output":"--- PASS: TestOpenAIResponsesTTFTDefaultsToSemanticOutput/passthrough (0.12s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.1786147+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTDefaultsToSemanticOutput/passthrough","Elapsed":0.12}
- {"Time":"2026-09-12T11:38:51.1786147+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTDefaultsToSemanticOutput","Output":"--- PASS: TestOpenAIResponsesTTFTDefaultsToSemanticOutput (0.24s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.1786147+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTDefaultsToSemanticOutput","Elapsed":0.24}
- {"Time":"2026-09-12T11:38:51.1786147+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_Hit"}
- {"Time":"2026-09-12T11:38:51.1786147+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_Hit","Output":"=== RUN TestOpenAIGatewayService_SelectAccountByPreviousResponseID_Hit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.1786147+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_Hit","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountByPreviousResponseID_Hit (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.1786147+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_Hit","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.1786147+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_QuotaAutoPausedMiss"}
- {"Time":"2026-09-12T11:38:51.1786147+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_QuotaAutoPausedMiss","Output":"=== RUN TestOpenAIGatewayService_SelectAccountByPreviousResponseID_QuotaAutoPausedMiss\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.1786147+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_QuotaAutoPausedMiss","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountByPreviousResponseID_QuotaAutoPausedMiss (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_QuotaAutoPausedMiss","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_RateLimitedMiss"}
- {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_RateLimitedMiss","Output":"=== RUN TestOpenAIGatewayService_SelectAccountByPreviousResponseID_RateLimitedMiss\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_RateLimitedMiss","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountByPreviousResponseID_RateLimitedMiss (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_RateLimitedMiss","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_DBRuntimeRecheckRateLimitedMiss"}
- {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_DBRuntimeRecheckRateLimitedMiss","Output":"=== RUN TestOpenAIGatewayService_SelectAccountByPreviousResponseID_DBRuntimeRecheckRateLimitedMiss\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_DBRuntimeRecheckRateLimitedMiss","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountByPreviousResponseID_DBRuntimeRecheckRateLimitedMiss (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_DBRuntimeRecheckRateLimitedMiss","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_Excluded"}
- {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_Excluded","Output":"=== RUN TestOpenAIGatewayService_SelectAccountByPreviousResponseID_Excluded\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_Excluded","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountByPreviousResponseID_Excluded (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_Excluded","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_APIKeyForceHTTPHit"}
- {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_APIKeyForceHTTPHit","Output":"=== RUN TestOpenAIGatewayService_SelectAccountByPreviousResponseID_APIKeyForceHTTPHit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_APIKeyForceHTTPHit","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountByPreviousResponseID_APIKeyForceHTTPHit (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_APIKeyForceHTTPHit","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_OAuthForceHTTPIgnored"}
- {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_OAuthForceHTTPIgnored","Output":"=== RUN TestOpenAIGatewayService_SelectAccountByPreviousResponseID_OAuthForceHTTPIgnored\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_OAuthForceHTTPIgnored","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountByPreviousResponseID_OAuthForceHTTPIgnored (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_OAuthForceHTTPIgnored","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_BusyKeepsSticky"}
- {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_BusyKeepsSticky","Output":"=== RUN TestOpenAIGatewayService_SelectAccountByPreviousResponseID_BusyKeepsSticky\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_BusyKeepsSticky","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountByPreviousResponseID_BusyKeepsSticky (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_BusyKeepsSticky","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_CapabilityMismatchKeepsSticky"}
- {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_CapabilityMismatchKeepsSticky","Output":"=== RUN TestOpenAIGatewayService_SelectAccountByPreviousResponseID_CapabilityMismatchKeepsSticky\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_CapabilityMismatchKeepsSticky","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountByPreviousResponseID_CapabilityMismatchKeepsSticky (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_CapabilityMismatchKeepsSticky","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ControlCloseFrames"}
- {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ControlCloseFrames","Output":"=== RUN TestReadOpenAIWSClientMessage_ControlCloseFrames\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ControlCloseFrames/inter-turn_idle_sends_normal_close"}
- {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ControlCloseFrames/inter-turn_idle_sends_normal_close","Output":"=== RUN TestReadOpenAIWSClientMessage_ControlCloseFrames/inter-turn_idle_sends_normal_close\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2048692+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ControlCloseFrames/inter-turn_idle_sends_normal_close","Output":"--- PASS: TestReadOpenAIWSClientMessage_ControlCloseFrames/inter-turn_idle_sends_normal_close (0.03s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2048692+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ControlCloseFrames/inter-turn_idle_sends_normal_close","Elapsed":0.03}
- {"Time":"2026-09-12T11:38:51.2048692+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ControlCloseFrames/first_message_timeout_sends_policy_close"}
- {"Time":"2026-09-12T11:38:51.2048692+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ControlCloseFrames/first_message_timeout_sends_policy_close","Output":"=== RUN TestReadOpenAIWSClientMessage_ControlCloseFrames/first_message_timeout_sends_policy_close\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2309912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ControlCloseFrames/first_message_timeout_sends_policy_close","Output":"--- PASS: TestReadOpenAIWSClientMessage_ControlCloseFrames/first_message_timeout_sends_policy_close (0.03s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2309912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ControlCloseFrames/first_message_timeout_sends_policy_close","Elapsed":0.03}
- {"Time":"2026-09-12T11:38:51.2309912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ControlCloseFrames/lease_loss_sends_retry_close"}
- {"Time":"2026-09-12T11:38:51.2309912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ControlCloseFrames/lease_loss_sends_retry_close","Output":"=== RUN TestReadOpenAIWSClientMessage_ControlCloseFrames/lease_loss_sends_retry_close\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2315045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ControlCloseFrames/lease_loss_sends_retry_close","Output":"--- PASS: TestReadOpenAIWSClientMessage_ControlCloseFrames/lease_loss_sends_retry_close (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2315045+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ControlCloseFrames/lease_loss_sends_retry_close","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.2315045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ControlCloseFrames","Output":"--- PASS: TestReadOpenAIWSClientMessage_ControlCloseFrames (0.05s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2315045+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ControlCloseFrames","Elapsed":0.05}
- {"Time":"2026-09-12T11:38:51.2315045+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ParentCancellationStillJoinsRead"}
- {"Time":"2026-09-12T11:38:51.2315045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ParentCancellationStillJoinsRead","Output":"=== RUN TestReadOpenAIWSClientMessage_ParentCancellationStillJoinsRead\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2320174+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ParentCancellationStillJoinsRead","Output":"--- PASS: TestReadOpenAIWSClientMessage_ParentCancellationStillJoinsRead (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2325283+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ParentCancellationStillJoinsRead","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.2325283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyHTTPClientReuse"}
- {"Time":"2026-09-12T11:38:51.2325283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyHTTPClientReuse","Output":"=== RUN TestCoderOpenAIWSClientDialer_ProxyHTTPClientReuse\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2325283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyHTTPClientReuse","Output":"--- PASS: TestCoderOpenAIWSClientDialer_ProxyHTTPClientReuse (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2325283+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyHTTPClientReuse","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.2325283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyHTTPClientInvalidURL"}
- {"Time":"2026-09-12T11:38:51.2325283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyHTTPClientInvalidURL","Output":"=== RUN TestCoderOpenAIWSClientDialer_ProxyHTTPClientInvalidURL\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2325283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyHTTPClientInvalidURL","Output":"--- PASS: TestCoderOpenAIWSClientDialer_ProxyHTTPClientInvalidURL (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2325283+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyHTTPClientInvalidURL","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.2325283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_TransportMetricsSnapshot"}
- {"Time":"2026-09-12T11:38:51.2325283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_TransportMetricsSnapshot","Output":"=== RUN TestCoderOpenAIWSClientDialer_TransportMetricsSnapshot\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2325283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_TransportMetricsSnapshot","Output":"--- PASS: TestCoderOpenAIWSClientDialer_TransportMetricsSnapshot (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2325283+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_TransportMetricsSnapshot","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.2325283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyClientCacheCapacity"}
- {"Time":"2026-09-12T11:38:51.2325283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyClientCacheCapacity","Output":"=== RUN TestCoderOpenAIWSClientDialer_ProxyClientCacheCapacity\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyClientCacheCapacity","Output":"--- PASS: TestCoderOpenAIWSClientDialer_ProxyClientCacheCapacity (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyClientCacheCapacity","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyClientCacheIdleTTL"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyClientCacheIdleTTL","Output":"=== RUN TestCoderOpenAIWSClientDialer_ProxyClientCacheIdleTTL\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyClientCacheIdleTTL","Output":"--- PASS: TestCoderOpenAIWSClientDialer_ProxyClientCacheIdleTTL (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyClientCacheIdleTTL","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyTransportTLSHandshakeTimeout"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyTransportTLSHandshakeTimeout","Output":"=== RUN TestCoderOpenAIWSClientDialer_ProxyTransportTLSHandshakeTimeout\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyTransportTLSHandshakeTimeout","Output":"--- PASS: TestCoderOpenAIWSClientDialer_ProxyTransportTLSHandshakeTimeout (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyTransportTLSHandshakeTimeout","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientConn_DoesNotSupportIdlePingWithoutReader"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientConn_DoesNotSupportIdlePingWithoutReader","Output":"=== RUN TestCoderOpenAIWSClientConn_DoesNotSupportIdlePingWithoutReader\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientConn_DoesNotSupportIdlePingWithoutReader","Output":"--- PASS: TestCoderOpenAIWSClientConn_DoesNotSupportIdlePingWithoutReader (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientConn_DoesNotSupportIdlePingWithoutReader","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError","Output":"=== RUN TestClassifyOpenAIWSAcquireError\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/dial_426_upgrade_required"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/dial_426_upgrade_required","Output":"=== RUN TestClassifyOpenAIWSAcquireError/dial_426_upgrade_required\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/dial_426_upgrade_required","Output":"--- PASS: TestClassifyOpenAIWSAcquireError/dial_426_upgrade_required (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/dial_426_upgrade_required","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/queue_full"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/queue_full","Output":"=== RUN TestClassifyOpenAIWSAcquireError/queue_full\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/queue_full","Output":"--- PASS: TestClassifyOpenAIWSAcquireError/queue_full (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/queue_full","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/preferred_conn_unavailable"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/preferred_conn_unavailable","Output":"=== RUN TestClassifyOpenAIWSAcquireError/preferred_conn_unavailable\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/preferred_conn_unavailable","Output":"--- PASS: TestClassifyOpenAIWSAcquireError/preferred_conn_unavailable (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/preferred_conn_unavailable","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/acquire_timeout"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/acquire_timeout","Output":"=== RUN TestClassifyOpenAIWSAcquireError/acquire_timeout\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/acquire_timeout","Output":"--- PASS: TestClassifyOpenAIWSAcquireError/acquire_timeout (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/acquire_timeout","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/auth_failed_401"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/auth_failed_401","Output":"=== RUN TestClassifyOpenAIWSAcquireError/auth_failed_401\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/auth_failed_401","Output":"--- PASS: TestClassifyOpenAIWSAcquireError/auth_failed_401 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/auth_failed_401","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/upstream_rate_limited"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/upstream_rate_limited","Output":"=== RUN TestClassifyOpenAIWSAcquireError/upstream_rate_limited\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/upstream_rate_limited","Output":"--- PASS: TestClassifyOpenAIWSAcquireError/upstream_rate_limited (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/upstream_rate_limited","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/upstream_5xx"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/upstream_5xx","Output":"=== RUN TestClassifyOpenAIWSAcquireError/upstream_5xx\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/upstream_5xx","Output":"--- PASS: TestClassifyOpenAIWSAcquireError/upstream_5xx (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/upstream_5xx","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/dial_failed_other_status"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/dial_failed_other_status","Output":"=== RUN TestClassifyOpenAIWSAcquireError/dial_failed_other_status\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/dial_failed_other_status","Output":"--- PASS: TestClassifyOpenAIWSAcquireError/dial_failed_other_status (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/dial_failed_other_status","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/other"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/other","Output":"=== RUN TestClassifyOpenAIWSAcquireError/other\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/other","Output":"--- PASS: TestClassifyOpenAIWSAcquireError/other (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/other","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/nil"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/nil","Output":"=== RUN TestClassifyOpenAIWSAcquireError/nil\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/nil","Output":"--- PASS: TestClassifyOpenAIWSAcquireError/nil (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/nil","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError","Output":"--- PASS: TestClassifyOpenAIWSAcquireError (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSDialError"}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSDialError","Output":"=== RUN TestClassifyOpenAIWSDialError\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSDialError/handshake_not_finished"}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSDialError/handshake_not_finished","Output":"=== RUN TestClassifyOpenAIWSDialError/handshake_not_finished\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSDialError/handshake_not_finished","Output":"--- PASS: TestClassifyOpenAIWSDialError/handshake_not_finished (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSDialError/handshake_not_finished","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSDialError/context_deadline"}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSDialError/context_deadline","Output":"=== RUN TestClassifyOpenAIWSDialError/context_deadline\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSDialError/context_deadline","Output":"--- PASS: TestClassifyOpenAIWSDialError/context_deadline (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSDialError/context_deadline","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSDialError","Output":"--- PASS: TestClassifyOpenAIWSDialError (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSDialError","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSummarizeOpenAIWSDialError"}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSummarizeOpenAIWSDialError","Output":"=== RUN TestSummarizeOpenAIWSDialError\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSummarizeOpenAIWSDialError","Output":"--- PASS: TestSummarizeOpenAIWSDialError (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSummarizeOpenAIWSDialError","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSErrorEvent"}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSErrorEvent","Output":"=== RUN TestClassifyOpenAIWSErrorEvent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSErrorEvent","Output":"--- PASS: TestClassifyOpenAIWSErrorEvent (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSErrorEvent","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSReconnectReason"}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSReconnectReason","Output":"=== RUN TestClassifyOpenAIWSReconnectReason\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSReconnectReason","Output":"--- PASS: TestClassifyOpenAIWSReconnectReason (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSReconnectReason","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorHTTPStatus"}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorHTTPStatus","Output":"=== RUN TestOpenAIWSErrorHTTPStatus\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorHTTPStatus","Output":"--- PASS: TestOpenAIWSErrorHTTPStatus (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorHTTPStatus","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSFallbackErrorResponse"}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSFallbackErrorResponse","Output":"=== RUN TestResolveOpenAIWSFallbackErrorResponse\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSFallbackErrorResponse/previous_response_not_found"}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSFallbackErrorResponse/previous_response_not_found","Output":"=== RUN TestResolveOpenAIWSFallbackErrorResponse/previous_response_not_found\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSFallbackErrorResponse/previous_response_not_found","Output":"--- PASS: TestResolveOpenAIWSFallbackErrorResponse/previous_response_not_found (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSFallbackErrorResponse/previous_response_not_found","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSFallbackErrorResponse/auth_failed_uses_dial_status"}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSFallbackErrorResponse/auth_failed_uses_dial_status","Output":"=== RUN TestResolveOpenAIWSFallbackErrorResponse/auth_failed_uses_dial_status\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSFallbackErrorResponse/auth_failed_uses_dial_status","Output":"--- PASS: TestResolveOpenAIWSFallbackErrorResponse/auth_failed_uses_dial_status (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSFallbackErrorResponse/auth_failed_uses_dial_status","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSFallbackErrorResponse/non_fallback_error_not_resolved"}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSFallbackErrorResponse/non_fallback_error_not_resolved","Output":"=== RUN TestResolveOpenAIWSFallbackErrorResponse/non_fallback_error_not_resolved\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSFallbackErrorResponse/non_fallback_error_not_resolved","Output":"--- PASS: TestResolveOpenAIWSFallbackErrorResponse/non_fallback_error_not_resolved (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSFallbackErrorResponse/non_fallback_error_not_resolved","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSFallbackErrorResponse","Output":"--- PASS: TestResolveOpenAIWSFallbackErrorResponse (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSFallbackErrorResponse","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIWSFallbackErrorResponseMarksDefaultClientRouteUnknown"}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIWSFallbackErrorResponseMarksDefaultClientRouteUnknown","Output":"=== RUN TestWriteOpenAIWSFallbackErrorResponseMarksDefaultClientRouteUnknown\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIWSFallbackErrorResponseMarksDefaultClientRouteUnknown","Output":"--- PASS: TestWriteOpenAIWSFallbackErrorResponseMarksDefaultClientRouteUnknown (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIWSFallbackErrorResponseMarksDefaultClientRouteUnknown","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIWSFallbackErrorResponseKeepsManagedProxy"}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIWSFallbackErrorResponseKeepsManagedProxy","Output":"=== RUN TestWriteOpenAIWSFallbackErrorResponseKeepsManagedProxy\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIWSFallbackErrorResponseKeepsManagedProxy","Output":"--- PASS: TestWriteOpenAIWSFallbackErrorResponseKeepsManagedProxy (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIWSFallbackErrorResponseKeepsManagedProxy","Elapsed":0}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSFallbackCooling"}
- {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSFallbackCooling","Output":"=== RUN TestOpenAIWSFallbackCooling\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSFallbackCooling","Output":"--- PASS: TestOpenAIWSFallbackCooling (1.20s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSFallbackCooling","Elapsed":1.2}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRetryBackoff"}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRetryBackoff","Output":"=== RUN TestOpenAIWSRetryBackoff\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRetryBackoff","Output":"--- PASS: TestOpenAIWSRetryBackoff (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRetryBackoff","Elapsed":0}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRetryTotalBudget"}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRetryTotalBudget","Output":"=== RUN TestOpenAIWSRetryTotalBudget\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRetryTotalBudget","Output":"--- PASS: TestOpenAIWSRetryTotalBudget (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRetryTotalBudget","Elapsed":0}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSReadFallbackReason"}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSReadFallbackReason","Output":"=== RUN TestClassifyOpenAIWSReadFallbackReason\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSReadFallbackReason","Output":"--- PASS: TestClassifyOpenAIWSReadFallbackReason (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSReadFallbackReason","Elapsed":0}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStoreDisabledConnMode"}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStoreDisabledConnMode","Output":"=== RUN TestOpenAIWSStoreDisabledConnMode\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStoreDisabledConnMode","Output":"--- PASS: TestOpenAIWSStoreDisabledConnMode (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStoreDisabledConnMode","Elapsed":0}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRetryMetricsSnapshot"}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRetryMetricsSnapshot","Output":"=== RUN TestOpenAIWSRetryMetricsSnapshot\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRetryMetricsSnapshot","Output":"--- PASS: TestOpenAIWSRetryMetricsSnapshot (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRetryMetricsSnapshot","Elapsed":0}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldLogOpenAIWSPayloadSchema"}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldLogOpenAIWSPayloadSchema","Output":"=== RUN TestShouldLogOpenAIWSPayloadSchema\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldLogOpenAIWSPayloadSchema","Output":"--- PASS: TestShouldLogOpenAIWSPayloadSchema (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldLogOpenAIWSPayloadSchema","Elapsed":0}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure"}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure","Output":"=== RUN TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.435Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=9101 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_mode_ctx_pool model=gpt-5.5 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.435Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=9101 account_type=apikey model=gpt-5.5 stream=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.435Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=9101 account_type=apikey ws_host=api.openai.com ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:52.435Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=9101 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=105 payload_key_sizes=input:34,type:15,model:7,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=true payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.435Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":9101,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.435Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=9101 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=unit-test-agent/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.435Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=9101 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_9101_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.435Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=9101 conn_id=oa_ws_9101_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.449Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=9101 conn_id=oa_ws_9101_1 stream=true payload_bytes=105 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.449Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=9101 conn_id=oa_ws_9101_1 idx=1 type=response.created bytes=79 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.449Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] buffer_enqueue account_id=9101 conn_id=oa_ws_9101_1 idx=1 event_idx=1 event_type=response.created buffer_size=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.449Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=9101 conn_id=oa_ws_9101_1 idx=2 type=response.output_text.delta bytes=55 token=true terminal=false buffered_pending=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.449Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] buffer_flush account_id=9101 conn_id=oa_ws_9101_1 reason=response.output_text.delta flushed=1 total_flushed=1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:52.449Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] client_disconnected account_id=9101 conn_id=oa_ws_9101_1 cause=request_context_canceled events=2 token_events=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.500Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=9101 conn_id=oa_ws_9101_1 idx=3 type=response.completed bytes=126 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.500Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=9101 conn_id=oa_ws_9101_1 response_id=resp_cancel_1 stream=true duration_ms=65 events=3 token_events=1 terminal_events=1 buffered_events=1 buffered_flushed=1 first_event=response.created last_event=response.completed first_token_ms=13 wrote_downstream=true client_disconnected=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.500Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=9101 request_id=resp_cancel_1 stream=true has_first_token_ms=true first_token_ms=13 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure","Output":"--- PASS: TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure (0.07s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure","Elapsed":0.07}
- {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIWSEventEnvelope"}
- {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIWSEventEnvelope","Output":"=== RUN TestParseOpenAIWSEventEnvelope\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIWSEventEnvelope","Output":"--- PASS: TestParseOpenAIWSEventEnvelope (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIWSEventEnvelope","Elapsed":0}
- {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIWSResponseUsageFromCompletedEvent"}
- {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIWSResponseUsageFromCompletedEvent","Output":"=== RUN TestParseOpenAIWSResponseUsageFromCompletedEvent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIWSResponseUsageFromCompletedEvent","Output":"--- PASS: TestParseOpenAIWSResponseUsageFromCompletedEvent (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIWSResponseUsageFromCompletedEvent","Elapsed":0}
- {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSEventShouldParseUsageTerminalEvents"}
- {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSEventShouldParseUsageTerminalEvents","Output":"=== RUN TestOpenAIWSEventShouldParseUsageTerminalEvents\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSEventShouldParseUsageTerminalEvents","Output":"=== PAUSE TestOpenAIWSEventShouldParseUsageTerminalEvents\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSEventShouldParseUsageTerminalEvents"}
- {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorEventHelpers_ConsistentWithWrapper"}
- {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorEventHelpers_ConsistentWithWrapper","Output":"=== RUN TestOpenAIWSErrorEventHelpers_ConsistentWithWrapper\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorEventHelpers_ConsistentWithWrapper","Output":"--- PASS: TestOpenAIWSErrorEventHelpers_ConsistentWithWrapper (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorEventHelpers_ConsistentWithWrapper","Elapsed":0}
- {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSMessageLikelyContainsToolCalls"}
- {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSMessageLikelyContainsToolCalls","Output":"=== RUN TestOpenAIWSMessageLikelyContainsToolCalls\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSMessageLikelyContainsToolCalls","Output":"--- PASS: TestOpenAIWSMessageLikelyContainsToolCalls (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSMessageLikelyContainsToolCalls","Elapsed":0}
- {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReplaceOpenAIWSMessageModel_OptimizedStillCorrect"}
- {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReplaceOpenAIWSMessageModel_OptimizedStillCorrect","Output":"=== RUN TestReplaceOpenAIWSMessageModel_OptimizedStillCorrect\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReplaceOpenAIWSMessageModel_OptimizedStillCorrect","Output":"--- PASS: TestReplaceOpenAIWSMessageModel_OptimizedStillCorrect (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReplaceOpenAIWSMessageModel_OptimizedStillCorrect","Elapsed":0}
- {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDownstreamWriteContext_CancellationOwnership"}
- {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDownstreamWriteContext_CancellationOwnership","Output":"=== RUN TestOpenAIWSDownstreamWriteContext_CancellationOwnership\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDownstreamWriteContext_CancellationOwnership/pre-canceled_ordinary_context_is_canceled_before_return"}
- {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDownstreamWriteContext_CancellationOwnership/pre-canceled_ordinary_context_is_canceled_before_return","Output":"=== RUN TestOpenAIWSDownstreamWriteContext_CancellationOwnership/pre-canceled_ordinary_context_is_canceled_before_return\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDownstreamWriteContext_CancellationOwnership/pre-canceled_ordinary_context_is_canceled_before_return","Output":"--- PASS: TestOpenAIWSDownstreamWriteContext_CancellationOwnership/pre-canceled_ordinary_context_is_canceled_before_return (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDownstreamWriteContext_CancellationOwnership/pre-canceled_ordinary_context_is_canceled_before_return","Elapsed":0}
- {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDownstreamWriteContext_CancellationOwnership/lease_loss_keeps_current_write_alive"}
- {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDownstreamWriteContext_CancellationOwnership/lease_loss_keeps_current_write_alive","Output":"=== RUN TestOpenAIWSDownstreamWriteContext_CancellationOwnership/lease_loss_keeps_current_write_alive\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.5212021+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDownstreamWriteContext_CancellationOwnership/lease_loss_keeps_current_write_alive","Output":"--- PASS: TestOpenAIWSDownstreamWriteContext_CancellationOwnership/lease_loss_keeps_current_write_alive (0.02s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.5212021+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDownstreamWriteContext_CancellationOwnership/lease_loss_keeps_current_write_alive","Elapsed":0.02}
- {"Time":"2026-09-12T11:38:52.5212021+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDownstreamWriteContext_CancellationOwnership/ordinary_cancellation_is_direct_and_preserves_cause"}
- {"Time":"2026-09-12T11:38:52.5212021+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDownstreamWriteContext_CancellationOwnership/ordinary_cancellation_is_direct_and_preserves_cause","Output":"=== RUN TestOpenAIWSDownstreamWriteContext_CancellationOwnership/ordinary_cancellation_is_direct_and_preserves_cause\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.5212021+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDownstreamWriteContext_CancellationOwnership/ordinary_cancellation_is_direct_and_preserves_cause","Output":"--- PASS: TestOpenAIWSDownstreamWriteContext_CancellationOwnership/ordinary_cancellation_is_direct_and_preserves_cause (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.5212021+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDownstreamWriteContext_CancellationOwnership/ordinary_cancellation_is_direct_and_preserves_cause","Elapsed":0}
- {"Time":"2026-09-12T11:38:52.5212021+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDownstreamWriteContext_CancellationOwnership","Output":"--- PASS: TestOpenAIWSDownstreamWriteContext_CancellationOwnership (0.02s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.5212021+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDownstreamWriteContext_CancellationOwnership","Elapsed":0.02}
- {"Time":"2026-09-12T11:38:52.5212021+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_KeepLeaseAcrossTurns"}
- {"Time":"2026-09-12T11:38:52.5212021+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_KeepLeaseAcrossTurns","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_KeepLeaseAcrossTurns\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.5217588+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_KeepLeaseAcrossTurns","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.521Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":114,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:52.5217588+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_KeepLeaseAcrossTurns","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:52.521Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=114 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=false has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:52.5217588+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_KeepLeaseAcrossTurns","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.521Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=114 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:52.5217588+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_KeepLeaseAcrossTurns","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:52.521Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=114 turn=1 conn_id=oa_ws_114_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:52.5217588+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_KeepLeaseAcrossTurns","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.521Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=114 turn=1 conn_id=oa_ws_114_1 payload_bytes=59\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:52.5217588+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_KeepLeaseAcrossTurns","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.521Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=114 turn=1 conn_id=oa_ws_114_1 response_id=resp_ingress_turn_1 duration_ms=0 events=2 token_events=0 terminal_events=1 first_event=response.output_item.done last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:52.5222642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_KeepLeaseAcrossTurns","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:52.522Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_next_turn_chain account_id=114 turn=1 next_turn=2 conn_id=oa_ws_114_1 previous_response_id=resp_ingress_turn_1 previous_response_id_kind=response_id last_turn_response_id=resp_ingress_turn_1 chained_from_last=true has_prompt_cache_key=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:52.5222642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_KeepLeaseAcrossTurns","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:52.522Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_chain account_id=114 turn=2 conn_id=oa_ws_114_1 previous_response_id=resp_ingress_turn_1 previous_response_id_kind=response_id last_turn_response_id=resp_ingress_turn_1 chained_from_last=true preferred_conn_id=oa_ws_114_1 header_session_id=- header_conversation_id=- has_turn_state=false turn_state_len=0 has_prompt_cache_key=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:52.5222642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_KeepLeaseAcrossTurns","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.522Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=114 turn=2 conn_id=oa_ws_114_1 payload_bytes=104\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:52.5222642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_KeepLeaseAcrossTurns","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.522Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=114 turn=2 conn_id=oa_ws_114_1 response_id=resp_ingress_turn_2 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:52.5222642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_KeepLeaseAcrossTurns","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:52.522Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=114 conn_id=oa_ws_114_1 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:52.5222642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_KeepLeaseAcrossTurns","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.522Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=114 conn_id=oa_ws_114_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:52.5222642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_KeepLeaseAcrossTurns","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_KeepLeaseAcrossTurns (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.5222642+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_KeepLeaseAcrossTurns","Elapsed":0}
- {"Time":"2026-09-12T11:38:52.5222642+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_LeaseLossSendsRetryClose"}
- {"Time":"2026-09-12T11:38:52.5222642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_LeaseLossSendsRetryClose","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_LeaseLossSendsRetryClose\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.5232844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_LeaseLossSendsRetryClose","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.523Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":118,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:52.5232844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_LeaseLossSendsRetryClose","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:52.523Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=118 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=false has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:52.5232844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_LeaseLossSendsRetryClose","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.523Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=118 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:52.5232844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_LeaseLossSendsRetryClose","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:52.523Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=118 turn=1 conn_id=oa_ws_118_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:52.5232844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_LeaseLossSendsRetryClose","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.523Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=118 turn=1 conn_id=oa_ws_118_1 payload_bytes=59\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:52.5232844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_LeaseLossSendsRetryClose","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.523Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=118 turn=1 conn_id=oa_ws_118_1 response_id=resp_lease_loss duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:52.5232844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_LeaseLossSendsRetryClose","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.523Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=118 conn_id=oa_ws_118_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:52.5238005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_LeaseLossSendsRetryClose","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_LeaseLossSendsRetryClose (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.5238005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_LeaseLossSendsRetryClose","Elapsed":0}
- {"Time":"2026-09-12T11:38:52.5238005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_IdleTimeoutReleasesStoreDisabledSession"}
- {"Time":"2026-09-12T11:38:52.5238005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_IdleTimeoutReleasesStoreDisabledSession","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_IdleTimeoutReleasesStoreDisabledSession\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:52.5243066+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_IdleTimeoutReleasesStoreDisabledSession","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.524Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":116,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:52.5243066+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_IdleTimeoutReleasesStoreDisabledSession","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:52.524Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=116 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=true has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:52.5243066+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_IdleTimeoutReleasesStoreDisabledSession","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.524Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=116 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:52.5243066+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_IdleTimeoutReleasesStoreDisabledSession","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:52.524Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=116 turn=1 conn_id=oa_ws_116_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:52.5243066+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_IdleTimeoutReleasesStoreDisabledSession","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.524Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=116 turn=1 conn_id=oa_ws_116_1 payload_bytes=73\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:52.5243066+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_IdleTimeoutReleasesStoreDisabledSession","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.524Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=116 turn=1 conn_id=oa_ws_116_1 response_id=resp_idle_timeout duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5247981+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_IdleTimeoutReleasesStoreDisabledSession","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.524Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_inter_turn_idle_timeout account_id=116 timeout_seconds=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5247981+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_IdleTimeoutReleasesStoreDisabledSession","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.524Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=116 conn_id=oa_ws_116_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5247981+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_IdleTimeoutReleasesStoreDisabledSession","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_IdleTimeoutReleasesStoreDisabledSession (1.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5247981+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_IdleTimeoutReleasesStoreDisabledSession","Elapsed":1}
- {"Time":"2026-09-12T11:38:53.5254045+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_FollowupCreateCanOmitModel"}
- {"Time":"2026-09-12T11:38:53.5254045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_FollowupCreateCanOmitModel","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_FollowupCreateCanOmitModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5259458+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_FollowupCreateCanOmitModel","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.525Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":115,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.5264642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_FollowupCreateCanOmitModel","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.525Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=115 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=false has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5264642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_FollowupCreateCanOmitModel","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.525Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=115 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5264642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_FollowupCreateCanOmitModel","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.526Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=115 turn=1 conn_id=oa_ws_115_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5264642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_FollowupCreateCanOmitModel","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.526Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=115 turn=1 conn_id=oa_ws_115_1 payload_bytes=59\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5264642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_FollowupCreateCanOmitModel","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.526Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=115 turn=1 conn_id=oa_ws_115_1 response_id=resp_omit_model_1 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5264642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_FollowupCreateCanOmitModel","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.526Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_next_turn_chain account_id=115 turn=1 next_turn=2 conn_id=oa_ws_115_1 previous_response_id=resp_omit_model_1 previous_response_id_kind=response_id last_turn_response_id=resp_omit_model_1 chained_from_last=true has_prompt_cache_key=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5264642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_FollowupCreateCanOmitModel","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.526Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_chain account_id=115 turn=2 conn_id=oa_ws_115_1 previous_response_id=resp_omit_model_1 previous_response_id_kind=response_id last_turn_response_id=resp_omit_model_1 chained_from_last=true preferred_conn_id=oa_ws_115_1 header_session_id=- header_conversation_id=- has_turn_state=false turn_state_len=0 has_prompt_cache_key=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.527013+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_FollowupCreateCanOmitModel","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.527Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=115 turn=2 conn_id=oa_ws_115_1 payload_bytes=102\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.527013+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_FollowupCreateCanOmitModel","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.527Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=115 turn=2 conn_id=oa_ws_115_1 response_id=resp_omit_model_2 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.527013+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_FollowupCreateCanOmitModel","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.527Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=115 conn_id=oa_ws_115_1 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.527013+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_FollowupCreateCanOmitModel","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.527Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=115 conn_id=oa_ws_115_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.527558+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_FollowupCreateCanOmitModel","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_FollowupCreateCanOmitModel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.527558+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_FollowupCreateCanOmitModel","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.527558+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite"}
- {"Time":"2026-09-12T11:38:53.527558+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5280736+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.528Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_codex_image_tool_injected account_id=31\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5280736+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.528Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_codex_image_tool_choice_auto account_id=31\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5280736+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.528Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_codex_image_bridge_instructions_added account_id=31\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5285952+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.528Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":31,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.5285952+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.528Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=31 account_type=oauth transport=responses_websockets_v2 ws_host=chatgpt.com ws_path=/backend-api/codex/responses ws_mode=ctx_pool store_disabled=true has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5285952+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.528Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=31 account_type=oauth transport=responses_websockets_v2 ws_host=chatgpt.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5285952+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.528Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=31 turn=1 conn_id=oa_ws_31_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5285952+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.528Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=31 turn=1 conn_id=oa_ws_31_1 payload_bytes=672\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5285952+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.528Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=31 turn=1 conn_id=oa_ws_31_1 response_id=resp_codex_image_bridge duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5291102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.529Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_next_turn_chain account_id=31 turn=1 next_turn=2 conn_id=oa_ws_31_1 previous_response_id=resp_codex_image_bridge previous_response_id_kind=response_id last_turn_response_id=resp_codex_image_bridge chained_from_last=true has_prompt_cache_key=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5291102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.529Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_prev_response_strict_eval account_id=31 turn=2 conn_id=oa_ws_31_1 action=drop_previous_response_id_full_create reason=non_input_changed previous_response_id=resp_codex_image_bridge expected_previous_response_id=resp_codex_image_bridge has_function_call_output=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5291102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.529Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=31 turn=2 conn_id=oa_ws_31_1 payload_bytes=648\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5291102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.529Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=31 turn=2 conn_id=oa_ws_31_1 response_id=resp_codex_image_lite duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5291102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.529Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_next_turn_chain account_id=31 turn=2 next_turn=3 conn_id=oa_ws_31_1 previous_response_id=resp_codex_image_lite previous_response_id_kind=response_id last_turn_response_id=resp_codex_image_lite chained_from_last=true has_prompt_cache_key=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5291102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.529Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_prev_response_strict_eval account_id=31 turn=3 conn_id=oa_ws_31_1 action=drop_previous_response_id_full_create reason=non_input_changed previous_response_id=resp_codex_image_lite expected_previous_response_id=resp_codex_image_lite has_function_call_output=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5296303+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.529Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=31 turn=3 conn_id=oa_ws_31_1 payload_bytes=543\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5296303+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.529Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=31 turn=3 conn_id=oa_ws_31_1 response_id=resp_codex_image_function duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5296303+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.529Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=31 conn_id=oa_ws_31_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.530149+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.530149+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.530149+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions"}
- {"Time":"2026-09-12T11:38:53.530149+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5309982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.530Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":441,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.5309982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.530Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=441 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=dedicated store_disabled=false has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5309982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.530Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=441 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5309982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.530Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=441 turn=1 conn_id=oa_ws_441_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5309982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.530Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=441 turn=1 conn_id=oa_ws_441_1 payload_bytes=59\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5309982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.530Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=441 turn=1 conn_id=oa_ws_441_1 response_id=resp_dedicated_1 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5315656+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.531Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=441 conn_id=oa_ws_441_1 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5315656+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.531Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=441 conn_id=oa_ws_441_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5320894+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.532Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":441,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.5320894+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.532Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=441 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=dedicated store_disabled=false has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5320894+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.532Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=441 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5320894+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.532Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=441 turn=1 conn_id=oa_ws_441_2 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5326125+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.532Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=441 turn=1 conn_id=oa_ws_441_2 payload_bytes=59\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5326125+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.532Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=441 turn=1 conn_id=oa_ws_441_2 response_id=resp_dedicated_2 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5326125+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.532Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=441 conn_id=oa_ws_441_2 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5326125+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.532Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=441 conn_id=oa_ws_441_2\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5326125+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5326125+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.5326125+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughModeRelaysByCaddyAdapter"}
- {"Time":"2026-09-12T11:38:53.5326125+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughModeRelaysByCaddyAdapter","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughModeRelaysByCaddyAdapter\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5336607+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughModeRelaysByCaddyAdapter","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.533Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=452 model=gpt-5.1 previous_response_id=- first_message_type=text first_message_bytes=111\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5336607+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughModeRelaysByCaddyAdapter","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.533Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_start account_id=452 ws_host=api.openai.com ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5336607+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughModeRelaysByCaddyAdapter","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.533Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":452,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"priority\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.5336607+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughModeRelaysByCaddyAdapter","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.533Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_ok account_id=452 status_code=0 upstream_request_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5336607+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughModeRelaysByCaddyAdapter","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.533Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=452 stage=relay_start direction=- msg_type=text bytes=115 graceful=false wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5336607+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughModeRelaysByCaddyAdapter","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.533Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=452 stage=write_first_message_skipped direction=client_to_upstream msg_type=text bytes=115 graceful=false wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5336607+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughModeRelaysByCaddyAdapter","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.533Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_turn_completed account_id=452 turn=1 request_id=resp_passthrough_turn_1 terminal_event=response.completed turn_requested_model=gpt-5.1 turn_upstream_model=gpt-5.1 duration_ms=0 first_token_ms=-1 input_tokens=2 output_tokens=3 cache_read_tokens=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5336607+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughModeRelaysByCaddyAdapter","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.533Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=452 stage=read_upstream_fail direction=upstream_to_client msg_type=- bytes=0 graceful=true wrote_downstream=true err=EOF\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5336607+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughModeRelaysByCaddyAdapter","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.533Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=452 stage=first_exit direction=upstream_to_client msg_type=- bytes=0 graceful=true wrote_downstream=true err=EOF\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5336607+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughModeRelaysByCaddyAdapter","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.533Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=452 stage=read_client_fail direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \\\"done\\\"\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5336607+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughModeRelaysByCaddyAdapter","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.533Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=452 stage=second_exit direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \\\"done\\\"\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5341775+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughModeRelaysByCaddyAdapter","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.533Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=452 stage=relay_complete direction=- msg_type=- bytes=0 graceful=true wrote_downstream=true err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5341775+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughModeRelaysByCaddyAdapter","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.533Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_completed account_id=452 request_id=resp_passthrough_turn_1 terminal_event=response.completed duration_ms=0 c2u_frames=1 u2c_frames=1 dropped_frames=0 turns=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5341775+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughModeRelaysByCaddyAdapter","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughModeRelaysByCaddyAdapter (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5341775+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughModeRelaysByCaddyAdapter","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.5341775+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries"}
- {"Time":"2026-09-12T11:38:53.5341775+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5341775+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/small_response_create"}
- {"Time":"2026-09-12T11:38:53.5341775+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/small_response_create","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/small_response_create\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5348158+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/small_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.534Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=453 model=gpt-5.1 previous_response_id=- first_message_type=text first_message_bytes=44\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5348158+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/small_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.534Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_start account_id=453 ws_host=api.openai.com ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5348158+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/small_response_create","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.534Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":453,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.5348158+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/small_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.534Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_ok account_id=453 status_code=0 upstream_request_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5348158+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/small_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.534Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=relay_start direction=- msg_type=text bytes=44 graceful=false wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5348158+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/small_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.534Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=write_first_message_skipped direction=client_to_upstream msg_type=text bytes=44 graceful=false wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5348158+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/small_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.534Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_turn_completed account_id=453 turn=1 request_id=resp_duplicate_keys terminal_event=response.completed turn_requested_model=gpt-5.1 turn_upstream_model=gpt-5.1 duration_ms=0 first_token_ms=-1 input_tokens=1 output_tokens=1 cache_read_tokens=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5353328+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/small_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.534Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=read_upstream_fail direction=upstream_to_client msg_type=- bytes=0 graceful=true wrote_downstream=true err=EOF\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5353328+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/small_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.534Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=first_exit direction=upstream_to_client msg_type=- bytes=0 graceful=true wrote_downstream=true err=EOF\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5353328+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/small_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.535Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=read_client_fail direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \\\"done\\\"\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5353328+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/small_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.535Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=second_exit direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \\\"done\\\"\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5353328+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/small_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.535Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=relay_complete direction=- msg_type=- bytes=0 graceful=true wrote_downstream=true err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5353328+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/small_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.535Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_completed account_id=453 request_id=resp_duplicate_keys terminal_event=response.completed duration_ms=0 c2u_frames=1 u2c_frames=1 dropped_frames=0 turns=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5353328+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/small_response_create","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/small_response_create (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5353328+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/small_response_create","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.5353328+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/continuation_response_create"}
- {"Time":"2026-09-12T11:38:53.5353328+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/continuation_response_create","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/continuation_response_create\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5364762+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/continuation_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.535Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=453 model=gpt-5.1 previous_response_id=resp_previous first_message_type=text first_message_bytes=83\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5364762+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/continuation_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.536Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_start account_id=453 ws_host=api.openai.com ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5364762+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/continuation_response_create","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.536Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":453,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.5364762+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/continuation_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.536Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_ok account_id=453 status_code=0 upstream_request_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5364762+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/continuation_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.536Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=relay_start direction=- msg_type=text bytes=83 graceful=false wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5364762+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/continuation_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.536Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=write_first_message_skipped direction=client_to_upstream msg_type=text bytes=83 graceful=false wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5364762+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/continuation_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.536Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_turn_completed account_id=453 turn=1 request_id=resp_duplicate_keys terminal_event=response.completed turn_requested_model=gpt-5.1 turn_upstream_model=gpt-5.1 duration_ms=0 first_token_ms=-1 input_tokens=1 output_tokens=1 cache_read_tokens=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5370615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/continuation_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.536Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=read_upstream_fail direction=upstream_to_client msg_type=- bytes=0 graceful=true wrote_downstream=true err=EOF\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5370615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/continuation_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.537Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=first_exit direction=upstream_to_client msg_type=- bytes=0 graceful=true wrote_downstream=true err=EOF\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5370615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/continuation_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.537Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=read_client_fail direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \\\"done\\\"\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5370615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/continuation_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.537Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=second_exit direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \\\"done\\\"\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5370615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/continuation_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.537Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=relay_complete direction=- msg_type=- bytes=0 graceful=true wrote_downstream=true err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5370615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/continuation_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.537Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_completed account_id=453 request_id=resp_duplicate_keys terminal_event=response.completed duration_ms=0 c2u_frames=1 u2c_frames=1 dropped_frames=0 turns=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5370615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/continuation_response_create","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/continuation_response_create (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5370615+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/continuation_response_create","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.5370615+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/other_event_type"}
- {"Time":"2026-09-12T11:38:53.5370615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/other_event_type","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/other_event_type\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5381513+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/other_event_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.538Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=453 model=- previous_response_id=- first_message_type=text first_message_bytes=70\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5381513+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/other_event_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.538Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_start account_id=453 ws_host=api.openai.com ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5381513+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/other_event_type","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.538Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":453,\"final_model\":\"\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.5381513+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/other_event_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.538Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_ok account_id=453 status_code=0 upstream_request_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5381513+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/other_event_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.538Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=relay_start direction=- msg_type=text bytes=70 graceful=false wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5381513+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/other_event_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.538Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=write_first_message_skipped direction=client_to_upstream msg_type=text bytes=70 graceful=false wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5387196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/other_event_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.538Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_turn_completed account_id=453 turn=1 request_id=resp_duplicate_keys terminal_event=response.completed turn_requested_model=- turn_upstream_model=- duration_ms=0 first_token_ms=-1 input_tokens=1 output_tokens=1 cache_read_tokens=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5387196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/other_event_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.538Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=read_upstream_fail direction=upstream_to_client msg_type=- bytes=0 graceful=true wrote_downstream=true err=EOF\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5387196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/other_event_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.538Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=first_exit direction=upstream_to_client msg_type=- bytes=0 graceful=true wrote_downstream=true err=EOF\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5387196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/other_event_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.538Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=read_client_fail direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \\\"done\\\"\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5387196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/other_event_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.538Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=second_exit direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \\\"done\\\"\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5387196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/other_event_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.538Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=relay_complete direction=- msg_type=- bytes=0 graceful=true wrote_downstream=true err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5387196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/other_event_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.538Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_completed account_id=453 request_id=resp_duplicate_keys terminal_event=response.completed duration_ms=0 c2u_frames=1 u2c_frames=1 dropped_frames=0 turns=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5392372+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/other_event_type","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/other_event_type (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5392372+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/other_event_type","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.5392372+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/malformed_data"}
- {"Time":"2026-09-12T11:38:53.5392372+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/malformed_data","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/malformed_data\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5402981+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/malformed_data","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.539Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=453 model=- previous_response_id=- first_message_type=text first_message_bytes=70\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5402981+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/malformed_data","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/malformed_data (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5402981+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/malformed_data","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.5402981+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_type"}
- {"Time":"2026-09-12T11:38:53.5402981+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_type","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_type\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5408159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.540Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=453 model=gpt-5.1 previous_response_id=- first_message_type=text first_message_bytes=69\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5408159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.540Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_start account_id=453 ws_host=api.openai.com ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5408159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_type","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.540Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":453,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.5408159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.540Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_ok account_id=453 status_code=0 upstream_request_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5413378+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.541Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=relay_start direction=- msg_type=text bytes=69 graceful=false wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5413378+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.541Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=write_first_message_skipped direction=client_to_upstream msg_type=text bytes=69 graceful=false wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5413378+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.541Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_turn_completed account_id=453 turn=1 request_id=resp_duplicate_keys terminal_event=response.completed turn_requested_model=gpt-5.1 turn_upstream_model=gpt-5.1 duration_ms=0 first_token_ms=-1 input_tokens=1 output_tokens=1 cache_read_tokens=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5413378+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.541Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=read_upstream_fail direction=upstream_to_client msg_type=- bytes=0 graceful=true wrote_downstream=true err=EOF\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5413378+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.541Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=first_exit direction=upstream_to_client msg_type=- bytes=0 graceful=true wrote_downstream=true err=EOF\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5413378+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.541Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=read_client_fail direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \\\"done\\\"\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5413378+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.541Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=second_exit direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \\\"done\\\"\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5413378+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.541Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=relay_complete direction=- msg_type=- bytes=0 graceful=true wrote_downstream=true err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5413378+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.541Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_completed account_id=453 request_id=resp_duplicate_keys terminal_event=response.completed duration_ms=0 c2u_frames=1 u2c_frames=1 dropped_frames=0 turns=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5413378+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_type","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_type (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5413378+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_type","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.5418534+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_previous_response_id"}
- {"Time":"2026-09-12T11:38:53.5418534+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_previous_response_id","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_previous_response_id\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5423705+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_previous_response_id","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.542Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=453 model=gpt-5.1 previous_response_id=- first_message_type=text first_message_bytes=100\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5423705+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_previous_response_id","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.542Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_start account_id=453 ws_host=api.openai.com ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5423705+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_previous_response_id","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.542Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":453,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.5423705+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_previous_response_id","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.542Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_ok account_id=453 status_code=0 upstream_request_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5423705+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_previous_response_id","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.542Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=relay_start direction=- msg_type=text bytes=100 graceful=false wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5423705+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_previous_response_id","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.542Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=write_first_message_skipped direction=client_to_upstream msg_type=text bytes=100 graceful=false wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5423705+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_previous_response_id","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.542Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_turn_completed account_id=453 turn=1 request_id=resp_duplicate_keys terminal_event=response.completed turn_requested_model=gpt-5.1 turn_upstream_model=gpt-5.1 duration_ms=0 first_token_ms=-1 input_tokens=1 output_tokens=1 cache_read_tokens=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5428874+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_previous_response_id","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.542Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=read_upstream_fail direction=upstream_to_client msg_type=- bytes=0 graceful=true wrote_downstream=true err=EOF\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5428874+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_previous_response_id","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.542Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=first_exit direction=upstream_to_client msg_type=- bytes=0 graceful=true wrote_downstream=true err=EOF\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5428874+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_previous_response_id","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.542Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=read_client_fail direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \\\"done\\\"\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5428874+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_previous_response_id","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.542Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=second_exit direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \\\"done\\\"\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5428874+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_previous_response_id","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.542Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=relay_complete direction=- msg_type=- bytes=0 graceful=true wrote_downstream=true err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5428874+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_previous_response_id","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.542Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_completed account_id=453 request_id=resp_duplicate_keys terminal_event=response.completed duration_ms=0 c2u_frames=1 u2c_frames=1 dropped_frames=0 turns=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5428874+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_previous_response_id","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_previous_response_id (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5428874+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_previous_response_id","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.5428874+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries (0.01s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5434408+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries","Elapsed":0.01}
- {"Time":"2026-09-12T11:38:53.5434408+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughHeadersUsePromptCacheAndTurnState"}
- {"Time":"2026-09-12T11:38:53.5434408+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughHeadersUsePromptCacheAndTurnState","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughHeadersUsePromptCacheAndTurnState\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5441139+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughHeadersUsePromptCacheAndTurnState","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.544Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=453 model=gpt-5.1 previous_response_id=- first_message_type=text first_message_bytes=538\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5441139+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughHeadersUsePromptCacheAndTurnState","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.544Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_start account_id=453 ws_host=chatgpt.com ws_path=/backend-api/codex/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5441139+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughHeadersUsePromptCacheAndTurnState","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.544Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":453,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.5441139+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughHeadersUsePromptCacheAndTurnState","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.544Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_ok account_id=453 status_code=0 upstream_request_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5441139+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughHeadersUsePromptCacheAndTurnState","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.544Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=relay_start direction=- msg_type=text bytes=538 graceful=false wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5441139+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughHeadersUsePromptCacheAndTurnState","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.544Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=write_first_message_skipped direction=client_to_upstream msg_type=text bytes=538 graceful=false wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5447852+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughHeadersUsePromptCacheAndTurnState","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.544Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_turn_completed account_id=453 turn=1 request_id=resp_passthrough_headers terminal_event=response.completed turn_requested_model=gpt-5.1 turn_upstream_model=gpt-5.1 duration_ms=0 first_token_ms=-1 input_tokens=1 output_tokens=1 cache_read_tokens=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5447852+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughHeadersUsePromptCacheAndTurnState","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.544Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=read_upstream_fail direction=upstream_to_client msg_type=- bytes=0 graceful=true wrote_downstream=true err=EOF\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5447852+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughHeadersUsePromptCacheAndTurnState","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.544Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=first_exit direction=upstream_to_client msg_type=- bytes=0 graceful=true wrote_downstream=true err=EOF\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5447852+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughHeadersUsePromptCacheAndTurnState","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.544Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=read_client_fail direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \\\"done\\\"\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5447852+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughHeadersUsePromptCacheAndTurnState","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.544Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=second_exit direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \\\"done\\\"\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5447852+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughHeadersUsePromptCacheAndTurnState","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.544Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=relay_complete direction=- msg_type=- bytes=0 graceful=true wrote_downstream=true err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5447852+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughHeadersUsePromptCacheAndTurnState","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.544Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_completed account_id=453 request_id=resp_passthrough_headers terminal_event=response.completed duration_ms=0 c2u_frames=1 u2c_frames=1 dropped_frames=0 turns=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5453161+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughHeadersUsePromptCacheAndTurnState","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughHeadersUsePromptCacheAndTurnState (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5453161+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughHeadersUsePromptCacheAndTurnState","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.5453161+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_HTTPBridgeModeRelaysHTTPStream"}
- {"Time":"2026-09-12T11:38:53.5453161+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_HTTPBridgeModeRelaysHTTPStream","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_HTTPBridgeModeRelaysHTTPStream\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5458471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_HTTPBridgeModeRelaysHTTPStream","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.545Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_start account_id=552 account_type=apikey payload_bytes=173 threshold_bytes=15728640 has_session_hash=true store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5463638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_HTTPBridgeModeRelaysHTTPStream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.546Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":552,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:53.5463638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_HTTPBridgeModeRelaysHTTPStream","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.546Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=552 turn=1 response_id=resp_http_bridge_1 payload_bytes=173 duration_ms=0 events=2 token_events=1 terminal_events=1 first_event=response.output_text.delta last_event=response.done first_token_ms=0 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5463638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_HTTPBridgeModeRelaysHTTPStream","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.546Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_client_closed account_id=552 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5463638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_HTTPBridgeModeRelaysHTTPStream","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_HTTPBridgeModeRelaysHTTPStream (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5463638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_HTTPBridgeModeRelaysHTTPStream","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.5463638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ModeOffReturnsPolicyViolation"}
- {"Time":"2026-09-12T11:38:53.5463638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ModeOffReturnsPolicyViolation","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ModeOffReturnsPolicyViolation\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5474013+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ModeOffReturnsPolicyViolation","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ModeOffReturnsPolicyViolation (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5474013+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ModeOffReturnsPolicyViolation","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.5474013+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropToFullCreate"}
- {"Time":"2026-09-12T11:38:53.5474013+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropToFullCreate","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropToFullCreate\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5479227+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropToFullCreate","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.547Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":140,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.5484446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropToFullCreate","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.547Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=140 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=true has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5484446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropToFullCreate","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.548Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=140 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5484446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropToFullCreate","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.548Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=140 turn=1 conn_id=oa_ws_140_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5484446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropToFullCreate","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.548Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=140 turn=1 conn_id=oa_ws_140_1 payload_bytes=120\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5484446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropToFullCreate","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.548Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=140 turn=1 conn_id=oa_ws_140_1 response_id=resp_preflight_rewrite_1 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5484446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropToFullCreate","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.548Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_next_turn_chain account_id=140 turn=1 next_turn=2 conn_id=oa_ws_140_1 previous_response_id=resp_stale_external previous_response_id_kind=response_id last_turn_response_id=resp_preflight_rewrite_1 chained_from_last=false has_prompt_cache_key=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5484446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropToFullCreate","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.548Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_prev_response_strict_eval account_id=140 turn=2 conn_id=oa_ws_140_1 action=drop_previous_response_id_full_create reason=previous_response_id_mismatch previous_response_id=resp_stale_external expected_previous_response_id=resp_preflight_rewrite_1 has_function_call_output=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5484446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropToFullCreate","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.548Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=140 turn=2 conn_id=oa_ws_140_1 payload_bytes=157\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5484446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropToFullCreate","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.548Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=140 turn=2 conn_id=oa_ws_140_1 response_id=resp_preflight_rewrite_2 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5489633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropToFullCreate","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.548Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=140 conn_id=oa_ws_140_1 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5489633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropToFullCreate","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.548Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=140 conn_id=oa_ws_140_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5489633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropToFullCreate","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropToFullCreate (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5489633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropToFullCreate","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.5489633+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects"}
- {"Time":"2026-09-12T11:38:53.5489633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5501396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.549Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":142,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.5501396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.550Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=142 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=true has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5501396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.550Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=142 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5501396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.550Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=142 turn=1 conn_id=oa_ws_142_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5501396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.550Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=142 turn=1 conn_id=oa_ws_142_1 payload_bytes=120\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5501396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.550Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=142 turn=1 conn_id=oa_ws_142_1 response_id=resp_turn_ping_drop_1 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5505695+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.550Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_next_turn_chain account_id=142 turn=1 next_turn=2 conn_id=oa_ws_142_1 previous_response_id=resp_stale_external previous_response_id_kind=response_id last_turn_response_id=resp_turn_ping_drop_1 chained_from_last=false has_prompt_cache_key=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5505695+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.550Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_prev_response_strict_eval account_id=142 turn=2 conn_id=oa_ws_142_1 action=drop_previous_response_id_full_create reason=previous_response_id_mismatch previous_response_id=resp_stale_external expected_previous_response_id=resp_turn_ping_drop_1 has_function_call_output=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5505695+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.550Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_preflight_ping_fail account_id=142 turn=2 conn_id=oa_ws_142_1 cause=preflight ping fail\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5505695+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.550Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=142 conn_id=oa_ws_142_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5505695+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.550Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=142 turn=2 conn_id=oa_ws_142_2 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5505695+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.550Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=142 turn=2 conn_id=oa_ws_142_2 payload_bytes=157\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5505695+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.550Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=142 turn=2 conn_id=oa_ws_142_2 response_id=resp_turn_ping_drop_2 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5510716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.551Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=142 conn_id=oa_ws_142_2 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5510716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.551Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=142 conn_id=oa_ws_142_2\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5510716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5510716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.5510716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreEnabledSkipsStrictPrevResponseEval"}
- {"Time":"2026-09-12T11:38:53.5510716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreEnabledSkipsStrictPrevResponseEval","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreEnabledSkipsStrictPrevResponseEval\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5529646+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreEnabledSkipsStrictPrevResponseEval","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.552Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":143,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.5529646+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreEnabledSkipsStrictPrevResponseEval","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.552Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=143 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=false has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5529646+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreEnabledSkipsStrictPrevResponseEval","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.552Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=143 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5529646+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreEnabledSkipsStrictPrevResponseEval","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.552Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=143 turn=1 conn_id=oa_ws_143_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5529646+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreEnabledSkipsStrictPrevResponseEval","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.552Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=143 turn=1 conn_id=oa_ws_143_1 payload_bytes=72\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5529646+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreEnabledSkipsStrictPrevResponseEval","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.552Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=143 turn=1 conn_id=oa_ws_143_1 response_id=resp_store_enabled_1 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5529646+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreEnabledSkipsStrictPrevResponseEval","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.552Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_next_turn_chain account_id=143 turn=1 next_turn=2 conn_id=oa_ws_143_1 previous_response_id=resp_stale_external previous_response_id_kind=response_id last_turn_response_id=resp_store_enabled_1 chained_from_last=false has_prompt_cache_key=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5529646+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreEnabledSkipsStrictPrevResponseEval","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.552Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_chain account_id=143 turn=2 conn_id=oa_ws_143_1 previous_response_id=resp_stale_external previous_response_id_kind=response_id last_turn_response_id=resp_store_enabled_1 chained_from_last=false preferred_conn_id=oa_ws_143_1 header_session_id=- header_conversation_id=- has_turn_state=false turn_state_len=0 has_prompt_cache_key=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5535372+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreEnabledSkipsStrictPrevResponseEval","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.552Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=143 turn=2 conn_id=oa_ws_143_1 payload_bytes=117\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5535372+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreEnabledSkipsStrictPrevResponseEval","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.553Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=143 turn=2 conn_id=oa_ws_143_1 response_id=resp_store_enabled_2 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5535372+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreEnabledSkipsStrictPrevResponseEval","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.553Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=143 conn_id=oa_ws_143_1 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5535372+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreEnabledSkipsStrictPrevResponseEval","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.553Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=143 conn_id=oa_ws_143_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5540405+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreEnabledSkipsStrictPrevResponseEval","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreEnabledSkipsStrictPrevResponseEval (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5540405+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreEnabledSkipsStrictPrevResponseEval","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.5540405+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponsePreflightSkipForFunctionCallOutput"}
- {"Time":"2026-09-12T11:38:53.5540405+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponsePreflightSkipForFunctionCallOutput","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponsePreflightSkipForFunctionCallOutput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5547183+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponsePreflightSkipForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.554Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":141,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.5547183+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponsePreflightSkipForFunctionCallOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.554Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=141 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=true has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5547183+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponsePreflightSkipForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.554Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=141 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5547183+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponsePreflightSkipForFunctionCallOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.554Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=141 turn=1 conn_id=oa_ws_141_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5547183+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponsePreflightSkipForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.554Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=141 turn=1 conn_id=oa_ws_141_1 payload_bytes=73\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5547183+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponsePreflightSkipForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.554Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=141 turn=1 conn_id=oa_ws_141_1 response_id=resp_preflight_skip_1 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5552398+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponsePreflightSkipForFunctionCallOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.555Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_next_turn_chain account_id=141 turn=1 next_turn=2 conn_id=oa_ws_141_1 previous_response_id=resp_stale_external previous_response_id_kind=response_id last_turn_response_id=resp_preflight_skip_1 chained_from_last=false has_prompt_cache_key=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5552398+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponsePreflightSkipForFunctionCallOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.555Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_chain account_id=141 turn=2 conn_id=oa_ws_141_1 previous_response_id=resp_stale_external previous_response_id_kind=response_id last_turn_response_id=resp_preflight_skip_1 chained_from_last=false preferred_conn_id=oa_ws_141_1 header_session_id=- header_conversation_id=- has_turn_state=false turn_state_len=0 has_prompt_cache_key=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5552398+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponsePreflightSkipForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.555Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=141 turn=2 conn_id=oa_ws_141_1 payload_bytes=193\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5552398+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponsePreflightSkipForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.555Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=141 turn=2 conn_id=oa_ws_141_1 response_id=resp_preflight_skip_2 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5552398+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponsePreflightSkipForFunctionCallOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.555Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=141 conn_id=oa_ws_141_1 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5552398+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponsePreflightSkipForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.555Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=141 conn_id=oa_ws_141_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5552398+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponsePreflightSkipForFunctionCallOutput","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponsePreflightSkipForFunctionCallOutput (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5552398+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponsePreflightSkipForFunctionCallOutput","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.5552398+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachPreviousResponseID"}
- {"Time":"2026-09-12T11:38:53.5552398+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachPreviousResponseID","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachPreviousResponseID\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5562915+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.556Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":143,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.5568393+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.556Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=143 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=true has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5568393+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.556Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=143 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5568393+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.556Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=143 turn=1 conn_id=oa_ws_143_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5568393+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.556Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=143 turn=1 conn_id=oa_ws_143_1 payload_bytes=120\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5568393+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.556Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=143 turn=1 conn_id=oa_ws_143_1 response_id=resp_auto_prev_1 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5568393+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.556Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_function_call_output_prev_infer account_id=143 turn=2 conn_id=oa_ws_143_1 action=set_previous_response_id previous_response_id=resp_auto_prev_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5568393+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.556Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_chain account_id=143 turn=2 conn_id=oa_ws_143_1 previous_response_id=resp_auto_prev_1 previous_response_id_kind=response_id last_turn_response_id=resp_auto_prev_1 chained_from_last=true preferred_conn_id=oa_ws_143_1 header_session_id=- header_conversation_id=- has_turn_state=false turn_state_len=0 has_prompt_cache_key=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5568393+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.556Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=143 turn=2 conn_id=oa_ws_143_1 payload_bytes=195\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5568393+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.556Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=143 turn=2 conn_id=oa_ws_143_1 response_id=resp_auto_prev_2 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5573595+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.557Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=143 conn_id=oa_ws_143_1 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5573595+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.557Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=143 conn_id=oa_ws_143_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5573595+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachPreviousResponseID","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachPreviousResponseID (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5573595+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachPreviousResponseID","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.5578771+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledToolSearchOutputAutoAttachesPreviousResponseID"}
- {"Time":"2026-09-12T11:38:53.5578771+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledToolSearchOutputAutoAttachesPreviousResponseID","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledToolSearchOutputAutoAttachesPreviousResponseID\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5590028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledToolSearchOutputAutoAttachesPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.559Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":145,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.5590028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledToolSearchOutputAutoAttachesPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.559Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=145 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=true has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5590028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledToolSearchOutputAutoAttachesPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.559Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=145 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5590028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledToolSearchOutputAutoAttachesPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.559Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=145 turn=1 conn_id=oa_ws_145_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5590028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledToolSearchOutputAutoAttachesPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.559Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=145 turn=1 conn_id=oa_ws_145_1 payload_bytes=120\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5590028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledToolSearchOutputAutoAttachesPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.559Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=145 turn=1 conn_id=oa_ws_145_1 response_id=resp_tool_search_prev_1 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5590028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledToolSearchOutputAutoAttachesPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.559Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_function_call_output_prev_infer account_id=145 turn=2 conn_id=oa_ws_145_1 action=set_previous_response_id previous_response_id=resp_tool_search_prev_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5590028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledToolSearchOutputAutoAttachesPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.559Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_chain account_id=145 turn=2 conn_id=oa_ws_145_1 previous_response_id=resp_tool_search_prev_1 previous_response_id_kind=response_id last_turn_response_id=resp_tool_search_prev_1 chained_from_last=true preferred_conn_id=oa_ws_145_1 header_session_id=- header_conversation_id=- has_turn_state=false turn_state_len=0 has_prompt_cache_key=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5590028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledToolSearchOutputAutoAttachesPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.559Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=145 turn=2 conn_id=oa_ws_145_1 payload_bytes=202\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5595228+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledToolSearchOutputAutoAttachesPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.559Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=145 turn=2 conn_id=oa_ws_145_1 response_id=resp_tool_search_prev_2 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5595228+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledToolSearchOutputAutoAttachesPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.559Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=145 conn_id=oa_ws_145_1 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5595228+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledToolSearchOutputAutoAttachesPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.559Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=145 conn_id=oa_ws_145_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5595228+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledToolSearchOutputAutoAttachesPreviousResponseID","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledToolSearchOutputAutoAttachesPreviousResponseID (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5595228+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledToolSearchOutputAutoAttachesPreviousResponseID","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.5595228+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenLastResponseIDMissing"}
- {"Time":"2026-09-12T11:38:53.5595228+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenLastResponseIDMissing","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenLastResponseIDMissing\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5605571+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenLastResponseIDMissing","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.560Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":144,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.5605571+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenLastResponseIDMissing","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.560Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=144 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=true has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5605571+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenLastResponseIDMissing","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.560Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=144 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5605571+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenLastResponseIDMissing","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.560Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=144 turn=1 conn_id=oa_ws_144_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5605571+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenLastResponseIDMissing","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.560Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=144 turn=1 conn_id=oa_ws_144_1 payload_bytes=120\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5605571+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenLastResponseIDMissing","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.560Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=144 turn=1 conn_id=oa_ws_144_1 response_id=- duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5605571+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenLastResponseIDMissing","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.560Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=144 turn=2 conn_id=oa_ws_144_1 payload_bytes=158\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5611297+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenLastResponseIDMissing","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.560Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=144 turn=2 conn_id=oa_ws_144_1 response_id=resp_auto_prev_skip_2 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5611297+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenLastResponseIDMissing","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.561Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=144 conn_id=oa_ws_144_1 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5611297+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenLastResponseIDMissing","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.561Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=144 conn_id=oa_ws_144_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5611297+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenLastResponseIDMissing","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenLastResponseIDMissing (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5611297+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenLastResponseIDMissing","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.5611297+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenToolCallContextPresent"}
- {"Time":"2026-09-12T11:38:53.5611297+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenToolCallContextPresent","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenToolCallContextPresent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5622377+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenToolCallContextPresent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.562Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":114,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.5622377+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenToolCallContextPresent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.562Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=114 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=true has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5622377+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenToolCallContextPresent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.562Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=114 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5622377+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenToolCallContextPresent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.562Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=114 turn=1 conn_id=oa_ws_114_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5622377+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenToolCallContextPresent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.562Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=114 turn=1 conn_id=oa_ws_114_1 payload_bytes=120\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5622377+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenToolCallContextPresent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.562Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=114 turn=1 conn_id=oa_ws_114_1 response_id=resp_auto_prev_ctx_1 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5627455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenToolCallContextPresent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.562Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=114 turn=2 conn_id=oa_ws_114_1 payload_bytes=314\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5627455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenToolCallContextPresent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.562Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=114 turn=2 conn_id=oa_ws_114_1 response_id=resp_auto_prev_ctx_2 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5627455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenToolCallContextPresent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.562Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=114 conn_id=oa_ws_114_1 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5632723+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenToolCallContextPresent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.562Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=114 conn_id=oa_ws_114_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5632723+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenToolCallContextPresent","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenToolCallContextPresent (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5632723+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenToolCallContextPresent","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.5632723+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachWhenOnlyItemReferencesPresent"}
- {"Time":"2026-09-12T11:38:53.5632723+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachWhenOnlyItemReferencesPresent","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachWhenOnlyItemReferencesPresent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5642951+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachWhenOnlyItemReferencesPresent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.563Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":115,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.5642951+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachWhenOnlyItemReferencesPresent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.564Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=115 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=true has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5642951+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachWhenOnlyItemReferencesPresent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.564Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=115 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5642951+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachWhenOnlyItemReferencesPresent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.564Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=115 turn=1 conn_id=oa_ws_115_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5642951+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachWhenOnlyItemReferencesPresent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.564Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=115 turn=1 conn_id=oa_ws_115_1 payload_bytes=120\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5642951+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachWhenOnlyItemReferencesPresent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.564Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=115 turn=1 conn_id=oa_ws_115_1 response_id=resp_auto_prev_ref_1 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5642951+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachWhenOnlyItemReferencesPresent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.564Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_function_call_output_prev_infer account_id=115 turn=2 conn_id=oa_ws_115_1 action=set_previous_response_id previous_response_id=resp_auto_prev_ref_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5642951+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachWhenOnlyItemReferencesPresent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.564Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_chain account_id=115 turn=2 conn_id=oa_ws_115_1 previous_response_id=resp_auto_prev_ref_1 previous_response_id_kind=response_id last_turn_response_id=resp_auto_prev_ref_1 chained_from_last=true preferred_conn_id=oa_ws_115_1 header_session_id=- header_conversation_id=- has_turn_state=false turn_state_len=0 has_prompt_cache_key=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5642951+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachWhenOnlyItemReferencesPresent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.564Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=115 turn=2 conn_id=oa_ws_115_1 payload_bytes=324\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5642951+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachWhenOnlyItemReferencesPresent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.564Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=115 turn=2 conn_id=oa_ws_115_1 response_id=resp_auto_prev_ref_2 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5648104+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachWhenOnlyItemReferencesPresent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.564Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=115 conn_id=oa_ws_115_1 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5648104+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachWhenOnlyItemReferencesPresent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.564Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=115 conn_id=oa_ws_115_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5648104+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachWhenOnlyItemReferencesPresent","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachWhenOnlyItemReferencesPresent (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5648104+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachWhenOnlyItemReferencesPresent","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.5648104+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn"}
- {"Time":"2026-09-12T11:38:53.5648104+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5658384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.565Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":116,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.5658384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.565Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=116 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=false has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5658384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.565Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=116 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5658384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.565Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=116 turn=1 conn_id=oa_ws_116_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5658384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.565Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=116 turn=1 conn_id=oa_ws_116_1 payload_bytes=59\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5658384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.565Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=116 turn=1 conn_id=oa_ws_116_1 response_id=resp_turn_ping_1 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5658384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.565Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_next_turn_chain account_id=116 turn=1 next_turn=2 conn_id=oa_ws_116_1 previous_response_id=resp_turn_ping_1 previous_response_id_kind=response_id last_turn_response_id=resp_turn_ping_1 chained_from_last=true has_prompt_cache_key=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5658384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.565Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_preflight_ping_fail account_id=116 turn=2 conn_id=oa_ws_116_1 cause=preflight ping fail\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5658384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.565Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=116 conn_id=oa_ws_116_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5663535+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.566Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=116 turn=2 conn_id=oa_ws_116_2 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5663535+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.566Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_chain account_id=116 turn=2 conn_id=oa_ws_116_2 previous_response_id=resp_turn_ping_1 previous_response_id_kind=response_id last_turn_response_id=resp_turn_ping_1 chained_from_last=true preferred_conn_id=- header_session_id=- header_conversation_id=- has_turn_state=false turn_state_len=0 has_prompt_cache_key=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5663535+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.566Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=116 turn=2 conn_id=oa_ws_116_2 payload_bytes=101\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5663535+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.566Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=116 turn=2 conn_id=oa_ws_116_2 response_id=resp_turn_ping_2 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5663535+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.566Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=116 conn_id=oa_ws_116_2 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5663535+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.566Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=116 conn_id=oa_ws_116_2\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5663535+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5663535+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.5663535+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects"}
- {"Time":"2026-09-12T11:38:53.5663535+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5676276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.567Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":121,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.5676276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.567Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=121 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=true has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5676276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.567Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=121 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5676276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.567Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=121 turn=1 conn_id=oa_ws_121_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5676276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.567Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=121 turn=1 conn_id=oa_ws_121_1 payload_bytes=120\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5676276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.567Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=121 turn=1 conn_id=oa_ws_121_1 response_id=resp_turn_ping_strict_1 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5676276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.567Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_next_turn_chain account_id=121 turn=1 next_turn=2 conn_id=oa_ws_121_1 previous_response_id=resp_turn_ping_strict_1 previous_response_id_kind=response_id last_turn_response_id=resp_turn_ping_strict_1 chained_from_last=true has_prompt_cache_key=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5676276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.567Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_preflight_ping_fail account_id=121 turn=2 conn_id=oa_ws_121_1 cause=preflight ping fail\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5681428+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.567Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_preflight_ping_recovery account_id=121 turn=2 conn_id=oa_ws_121_1 action=drop_previous_response_id_retry previous_response_id=resp_turn_ping_strict_1 has_function_call_output=false has_replay_tool_context=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5681428+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.568Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=121 conn_id=oa_ws_121_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5681428+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.568Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=121 turn=2 conn_id=oa_ws_121_2 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5681428+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.568Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=121 turn=2 conn_id=oa_ws_121_2 payload_bytes=157\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5681428+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.568Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=121 turn=2 conn_id=oa_ws_121_2 response_id=resp_turn_ping_strict_2 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5681428+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.568Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=121 conn_id=oa_ws_121_2 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5681428+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.568Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=121 conn_id=oa_ws_121_2\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5681428+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5681428+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.568661+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext"}
- {"Time":"2026-09-12T11:38:53.568661+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5691974+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.569Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":128,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.5691974+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.569Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=128 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=true has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5691974+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.569Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=128 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5691974+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.569Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=128 turn=1 conn_id=oa_ws_128_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5691974+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.569Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=128 turn=1 conn_id=oa_ws_128_1 payload_bytes=169\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5697145+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.569Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=128 turn=1 conn_id=oa_ws_128_1 response_id=resp_turn_ping_replay_ctx_1 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5697145+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.569Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_next_turn_chain account_id=128 turn=1 next_turn=2 conn_id=oa_ws_128_1 previous_response_id=resp_turn_ping_replay_ctx_1 previous_response_id_kind=response_id last_turn_response_id=resp_turn_ping_replay_ctx_1 chained_from_last=true has_prompt_cache_key=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5697145+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.569Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_preflight_ping_fail account_id=128 turn=2 conn_id=oa_ws_128_1 cause=preflight ping fail\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5697145+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.569Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_preflight_ping_recovery account_id=128 turn=2 conn_id=oa_ws_128_1 action=drop_previous_response_id_retry previous_response_id=resp_turn_ping_replay_ctx_1 has_function_call_output=true has_replay_tool_context=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.570228+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.569Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=128 conn_id=oa_ws_128_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.570228+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.569Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=128 turn=2 conn_id=oa_ws_128_2 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.570228+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.569Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=128 turn=2 conn_id=oa_ws_128_2 payload_bytes=343\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.570228+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.569Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=128 turn=2 conn_id=oa_ws_128_2 response_id=resp_turn_ping_replay_ctx_2 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.570228+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.570Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=128 conn_id=oa_ws_128_2 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.570228+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.570Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=128 conn_id=oa_ws_128_2\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.570228+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.570228+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.570228+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenFunctionCallOutputNeedsPreviousResponseID"}
- {"Time":"2026-09-12T11:38:53.570228+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenFunctionCallOutputNeedsPreviousResponseID","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenFunctionCallOutputNeedsPreviousResponseID\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5714003+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenFunctionCallOutputNeedsPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.571Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":129,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.5714003+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenFunctionCallOutputNeedsPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.571Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=129 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=true has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5714003+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenFunctionCallOutputNeedsPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.571Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=129 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5714003+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenFunctionCallOutputNeedsPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.571Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=129 turn=1 conn_id=oa_ws_129_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5714003+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenFunctionCallOutputNeedsPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.571Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=129 turn=1 conn_id=oa_ws_129_1 payload_bytes=235\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5714003+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenFunctionCallOutputNeedsPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.571Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=129 turn=1 conn_id=oa_ws_129_1 response_id=resp_turn_ping_replay_fc_1 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5720172+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenFunctionCallOutputNeedsPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.572Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_next_turn_chain account_id=129 turn=1 next_turn=2 conn_id=oa_ws_129_1 previous_response_id=resp_turn_ping_replay_fc_1 previous_response_id_kind=response_id last_turn_response_id=resp_turn_ping_replay_fc_1 chained_from_last=true has_prompt_cache_key=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5720172+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenFunctionCallOutputNeedsPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.572Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_preflight_ping_fail account_id=129 turn=2 conn_id=oa_ws_129_1 cause=preflight ping fail\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5720172+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenFunctionCallOutputNeedsPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.572Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_preflight_ping_recovery_skip account_id=129 turn=2 conn_id=oa_ws_129_1 reason=function_call_output_missing_replay_context action=fail_close previous_response_id=resp_turn_ping_replay_fc_1 has_replay_tool_context=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5720172+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenFunctionCallOutputNeedsPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.572Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=129 conn_id=oa_ws_129_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5720172+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenFunctionCallOutputNeedsPreviousResponseID","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenFunctionCallOutputNeedsPreviousResponseID (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5720172+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenFunctionCallOutputNeedsPreviousResponseID","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.5720172+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenReplayHasFunctionCallOutput"}
- {"Time":"2026-09-12T11:38:53.5720172+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenReplayHasFunctionCallOutput","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenReplayHasFunctionCallOutput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5732161+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenReplayHasFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.573Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":130,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.5732161+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenReplayHasFunctionCallOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.573Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=130 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=true has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5732161+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenReplayHasFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.573Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=130 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5732161+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenReplayHasFunctionCallOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.573Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=130 turn=1 conn_id=oa_ws_130_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5732161+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenReplayHasFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.573Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=130 turn=1 conn_id=oa_ws_130_1 payload_bytes=235\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5732161+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenReplayHasFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.573Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=130 turn=1 conn_id=oa_ws_130_1 response_id=resp_turn_ping_replay_only_fc_1 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.573736+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenReplayHasFunctionCallOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.573Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_next_turn_chain account_id=130 turn=1 next_turn=2 conn_id=oa_ws_130_1 previous_response_id=resp_turn_ping_replay_only_fc_1 previous_response_id_kind=response_id last_turn_response_id=resp_turn_ping_replay_only_fc_1 chained_from_last=true has_prompt_cache_key=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.573736+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenReplayHasFunctionCallOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.573Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_preflight_ping_fail account_id=130 turn=2 conn_id=oa_ws_130_1 cause=preflight ping fail\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.573736+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenReplayHasFunctionCallOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.573Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_preflight_ping_recovery_skip account_id=130 turn=2 conn_id=oa_ws_130_1 reason=function_call_output_missing_replay_context action=fail_close previous_response_id=resp_turn_ping_replay_only_fc_1 has_replay_tool_context=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.573736+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenReplayHasFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.573Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=130 conn_id=oa_ws_130_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.573736+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenReplayHasFunctionCallOutput","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenReplayHasFunctionCallOutput (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.573736+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenReplayHasFunctionCallOutput","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.573736+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce"}
- {"Time":"2026-09-12T11:38:53.573736+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5747774+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.574Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":117,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.5747774+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.574Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=117 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=false has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5747774+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.574Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=117 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5747774+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.574Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=117 turn=1 conn_id=oa_ws_117_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5747774+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.574Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=117 turn=1 conn_id=oa_ws_117_1 payload_bytes=59\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5747774+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.574Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=117 turn=1 conn_id=oa_ws_117_1 response_id=resp_turn_write_retry_1 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5752966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.575Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_next_turn_chain account_id=117 turn=1 next_turn=2 conn_id=oa_ws_117_1 previous_response_id=resp_turn_write_retry_1 previous_response_id_kind=response_id last_turn_response_id=resp_turn_write_retry_1 chained_from_last=true has_prompt_cache_key=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5752966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.575Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_chain account_id=117 turn=2 conn_id=oa_ws_117_1 previous_response_id=resp_turn_write_retry_1 previous_response_id_kind=response_id last_turn_response_id=resp_turn_write_retry_1 chained_from_last=true preferred_conn_id=oa_ws_117_1 header_session_id=- header_conversation_id=- has_turn_state=false turn_state_len=0 has_prompt_cache_key=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5752966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.575Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_retry account_id=117 turn=2 retry=1 reason=write_upstream conn_id=oa_ws_117_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5752966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.575Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=117 conn_id=oa_ws_117_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5752966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.575Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=117 turn=2 conn_id=oa_ws_117_2 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5752966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.575Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_chain account_id=117 turn=2 conn_id=oa_ws_117_2 previous_response_id=resp_turn_write_retry_1 previous_response_id_kind=response_id last_turn_response_id=resp_turn_write_retry_1 chained_from_last=true preferred_conn_id=- header_session_id=- header_conversation_id=- has_turn_state=false turn_state_len=0 has_prompt_cache_key=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5752966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.575Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=117 turn=2 conn_id=oa_ws_117_2 payload_bytes=108\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5752966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.575Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=117 turn=2 conn_id=oa_ws_117_2 response_id=resp_turn_write_retry_2 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5758102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.575Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=117 conn_id=oa_ws_117_2 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5758102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.575Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=117 conn_id=oa_ws_117_2\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5758102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5758102+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.5758102+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID"}
- {"Time":"2026-09-12T11:38:53.5758102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5768532+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.576Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":118,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.5768532+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.576Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=118 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=false has_session_hash=true has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5768532+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.576Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=118 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=true store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5768532+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.576Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_continuation_probe account_id=118 turn=1 previous_response_id=resp_seed_anchor previous_response_id_kind=response_id preferred_conn_id=- session_hash=c545638f3dcd... header_session_id=- header_conversation_id=- has_turn_state=false turn_state_len=0 has_prompt_cache_key=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5768532+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.576Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=118 turn=1 conn_id=oa_ws_118_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5768532+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.576Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_chain account_id=118 turn=1 conn_id=oa_ws_118_1 previous_response_id=resp_seed_anchor previous_response_id_kind=response_id last_turn_response_id=- chained_from_last=false preferred_conn_id=- header_session_id=- header_conversation_id=- has_turn_state=false turn_state_len=0 has_prompt_cache_key=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5768532+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.576Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=118 turn=1 conn_id=oa_ws_118_1 payload_bytes=101\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5768532+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.576Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=118 turn=1 conn_id=oa_ws_118_1 response_id=resp_turn_prev_recover_1 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5773697+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.577Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_next_turn_chain account_id=118 turn=1 next_turn=2 conn_id=oa_ws_118_1 previous_response_id=resp_turn_prev_recover_1 previous_response_id_kind=response_id last_turn_response_id=resp_turn_prev_recover_1 chained_from_last=true has_prompt_cache_key=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5773697+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.577Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_chain account_id=118 turn=2 conn_id=oa_ws_118_1 previous_response_id=resp_turn_prev_recover_1 previous_response_id_kind=response_id last_turn_response_id=resp_turn_prev_recover_1 chained_from_last=true preferred_conn_id=oa_ws_118_1 header_session_id=- header_conversation_id=- has_turn_state=false turn_state_len=0 has_prompt_cache_key=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5773697+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.577Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=118 turn=2 conn_id=oa_ws_118_1 payload_bytes=109\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5773697+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.577Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_prev_response_recoverable account_id=118 turn=2 conn_id=oa_ws_118_1 idx=1 reason=previous_response_not_found code=previous_response_not_found type=invalid_request_err message=- previous_response_id=resp_turn_prev_recover_1 previous_response_id_kind=response_id response_id=- store_disabled=false has_prompt_cache_key=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5773697+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.577Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_prev_response_recovery account_id=118 turn=2 conn_id=oa_ws_118_1 action=drop_previous_response_id retry=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5773697+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.577Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=118 conn_id=oa_ws_118_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5773697+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.577Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=118 turn=2 conn_id=oa_ws_118_2 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5773697+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.577Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=118 turn=2 conn_id=oa_ws_118_2 payload_bytes=59\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5773697+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.577Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=118 turn=2 conn_id=oa_ws_118_2 response_id=resp_turn_prev_recover_2 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5779119+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.577Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=118 conn_id=oa_ws_118_2 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5779119+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.577Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=118 conn_id=oa_ws_118_2\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5782587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5782587+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.5782587+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery"}
- {"Time":"2026-09-12T11:38:53.5782587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5797248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.579Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":122,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.5797248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.579Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=122 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=true has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5797248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.579Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=122 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5797248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.579Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=122 turn=1 conn_id=oa_ws_122_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5797248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.579Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=122 turn=1 conn_id=oa_ws_122_1 payload_bytes=158\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5797248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.579Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=122 turn=1 conn_id=oa_ws_122_1 response_id=resp_turn_prev_strict_recover_1 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5797248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.579Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":122,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.5797248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.579Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_next_turn_chain account_id=122 turn=1 next_turn=2 conn_id=oa_ws_122_1 previous_response_id=resp_turn_prev_strict_recover_1 previous_response_id_kind=response_id last_turn_response_id=resp_turn_prev_strict_recover_1 chained_from_last=true has_prompt_cache_key=true store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5797248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.579Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_chain account_id=122 turn=2 conn_id=oa_ws_122_1 previous_response_id=resp_turn_prev_strict_recover_1 previous_response_id_kind=response_id last_turn_response_id=resp_turn_prev_strict_recover_1 chained_from_last=true preferred_conn_id=oa_ws_122_1 header_session_id=pk_strict_layer2 header_conversation_id=- has_turn_state=false turn_state_len=0 has_prompt_cache_key=true store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5797248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.579Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=122 turn=2 conn_id=oa_ws_122_1 payload_bytes=215\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5797248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.579Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_prev_response_recoverable account_id=122 turn=2 conn_id=oa_ws_122_1 idx=1 reason=previous_response_not_found code=previous_response_not_found type=invalid_request_err message=missing strict anchor previous_response_id=resp_turn_prev_strict_recover_1 previous_response_id_kind=response_id response_id=- store_disabled=true has_prompt_cache_key=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5802268+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.579Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_prev_response_recovery_layer2 account_id=122 turn=2 conn_id=oa_ws_122_1 store_disabled_conn_mode=off action=drop_previous_response_id_retry\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5802268+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.580Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_prev_response_recovery account_id=122 turn=2 conn_id=oa_ws_122_1 action=drop_previous_response_id retry=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5802268+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.580Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=122 conn_id=oa_ws_122_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5802268+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.580Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=122 turn=2 conn_id=oa_ws_122_2 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5802268+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.580Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=122 turn=2 conn_id=oa_ws_122_2 payload_bytes=195\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5802268+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.580Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=122 turn=2 conn_id=oa_ws_122_2 response_id=resp_turn_prev_strict_recover_2 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5802268+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.580Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=122 conn_id=oa_ws_122_2 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5802268+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.580Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=122 conn_id=oa_ws_122_2\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5808952+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5808952+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.5808952+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID"}
- {"Time":"2026-09-12T11:38:53.5808952+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5822919+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.581Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":120,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.5822919+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.581Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=120 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=false has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5822919+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.581Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=120 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5822919+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.582Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=120 turn=1 conn_id=oa_ws_120_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5822919+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.582Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=120 turn=1 conn_id=oa_ws_120_1 payload_bytes=59\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5822919+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.582Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=120 turn=1 conn_id=oa_ws_120_1 response_id=resp_turn_prev_once_1 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5829853+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.582Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_next_turn_chain account_id=120 turn=1 next_turn=2 conn_id=oa_ws_120_1 previous_response_id=resp_turn_prev_once_1 previous_response_id_kind=response_id last_turn_response_id=resp_turn_prev_once_1 chained_from_last=true has_prompt_cache_key=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5829853+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.582Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_chain account_id=120 turn=2 conn_id=oa_ws_120_1 previous_response_id=resp_turn_prev_once_1 previous_response_id_kind=response_id last_turn_response_id=resp_turn_prev_once_1 chained_from_last=true preferred_conn_id=oa_ws_120_1 header_session_id=- header_conversation_id=- has_turn_state=false turn_state_len=0 has_prompt_cache_key=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5829853+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.582Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=120 turn=2 conn_id=oa_ws_120_1 payload_bytes=167\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5829853+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.582Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_prev_response_recoverable account_id=120 turn=2 conn_id=oa_ws_120_1 idx=1 reason=previous_response_not_found code=previous_response_not_found type=invalid_request_err message=first missing previous_response_id=resp_turn_prev_once_1 previous_response_id_kind=response_id response_id=- store_disabled=false has_prompt_cache_key=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5829853+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.582Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_prev_response_recovery account_id=120 turn=2 conn_id=oa_ws_120_1 action=drop_previous_response_id retry=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5829853+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.582Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=120 conn_id=oa_ws_120_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5829853+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.582Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=120 turn=2 conn_id=oa_ws_120_2 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5829853+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.582Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=120 turn=2 conn_id=oa_ws_120_2 payload_bytes=70\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5834892+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.583Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=120 turn=2 conn_id=oa_ws_120_2 response_id=resp_turn_prev_once_2 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5834892+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.583Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=120 conn_id=oa_ws_120_2 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5834892+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.583Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=120 conn_id=oa_ws_120_2\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5840163+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5840163+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.5840163+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_RejectsMessageIDAsPreviousResponseID"}
- {"Time":"2026-09-12T11:38:53.5840163+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_RejectsMessageIDAsPreviousResponseID","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_RejectsMessageIDAsPreviousResponseID\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5854715+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_RejectsMessageIDAsPreviousResponseID","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_RejectsMessageIDAsPreviousResponseID (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5854715+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_RejectsMessageIDAsPreviousResponseID","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.5854715+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ClientDisconnectStillDrainsUpstream"}
- {"Time":"2026-09-12T11:38:53.5854715+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ClientDisconnectStillDrainsUpstream","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ClientDisconnectStillDrainsUpstream\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.5867047+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ClientDisconnectStillDrainsUpstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.586Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":115,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"flex\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.5867047+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ClientDisconnectStillDrainsUpstream","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.586Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=115 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=false has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5867047+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ClientDisconnectStillDrainsUpstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.586Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=115 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5867047+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ClientDisconnectStillDrainsUpstream","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.586Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=115 turn=1 conn_id=oa_ws_115_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.5867047+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ClientDisconnectStillDrainsUpstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.586Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=115 turn=1 conn_id=oa_ws_115_1 payload_bytes=81\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8370572+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ClientDisconnectStillDrainsUpstream","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.837Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_disconnected_drain account_id=115 turn=1 conn_id=oa_ws_115_1 close_status=- close_reason=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8370572+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ClientDisconnectStillDrainsUpstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.837Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=115 turn=1 conn_id=oa_ws_115_1 response_id=resp_ingress_disconnect duration_ms=250 events=3 token_events=0 terminal_events=1 first_event=response.created last_event=response.completed first_token_ms=-1 client_disconnected=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8370572+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ClientDisconnectStillDrainsUpstream","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.837Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=115 conn_id=oa_ws_115_1 close_status=- close_reason=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8370572+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ClientDisconnectStillDrainsUpstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.837Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=115 conn_id=oa_ws_115_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8370572+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ClientDisconnectStillDrainsUpstream","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ClientDisconnectStillDrainsUpstream (0.25s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8370572+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ClientDisconnectStillDrainsUpstream","Elapsed":0.25}
- {"Time":"2026-09-12T11:38:53.8370572+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn"}
- {"Time":"2026-09-12T11:38:53.8370572+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8376886+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.837Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":119,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.837Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=119 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=false has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.838Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=119 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.838Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=119 turn=1 conn_id=oa_ws_119_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.838Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=119 turn=1 conn_id=oa_ws_119_1 payload_bytes=184\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.838Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_invalid_encrypted_lineage_mark account_id=119 turn=1 digests=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:38:53.838Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_error_event account_id=119 turn=1 conn_id=oa_ws_119_1 idx=1 fallback_reason=invalid_encrypted_content err_code=invalid_encrypted_content err_type=invalid_request_err err_message=The encrypted content could not be verified previous_response_id=- previous_response_id_kind=empty response_id=- store_disabled=false has_prompt_cache_key=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).ProxyResponsesWebSocketFromClient.func10\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_ingress.go:1113\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).ProxyResp"}
- {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn","Output":"onsesWebSocketFromClient\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_ingress.go:1785\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn.func1\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_ingress_session_test.go:4673\\nnet/http.HandlerFunc.ServeHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/net/http/server.go:2338\\nnet/http.serverHandler.ServeHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/net/http/server.go:3413\\nnet/http.(*conn).serve\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/net/http/server.go:2137\"}\n"}
- {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.838Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=119 turn=1 conn_id=oa_ws_119_1 response_id=resp_enc_lineage_1 duration_ms=0 events=2 token_events=0 terminal_events=1 first_event=err last_event=response.fail first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.838Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_invalid_encrypted_lineage_strip account_id=119 turn=2 stripped_items=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.838Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=119 turn=2 conn_id=oa_ws_119_1 payload_bytes=186\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.838Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=119 turn=2 conn_id=oa_ws_119_1 response_id=resp_enc_lineage_2 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.838Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=119 conn_id=oa_ws_119_1 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.838Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=119 conn_id=oa_ws_119_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError"}
- {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError","Output":"=== RUN TestIsOpenAIWSClientDisconnectError\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError","Output":"=== PAUSE TestIsOpenAIWSClientDisconnectError\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError"}
- {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSIngressPreviousResponseNotFound"}
- {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSIngressPreviousResponseNotFound","Output":"=== RUN TestIsOpenAIWSIngressPreviousResponseNotFound\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSIngressPreviousResponseNotFound","Output":"=== PAUSE TestIsOpenAIWSIngressPreviousResponseNotFound\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSIngressPreviousResponseNotFound"}
- {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSIngressPreviousResponseRecoveryEnabled"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSIngressPreviousResponseRecoveryEnabled","Output":"=== RUN TestOpenAIWSIngressPreviousResponseRecoveryEnabled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSIngressPreviousResponseRecoveryEnabled","Output":"=== PAUSE TestOpenAIWSIngressPreviousResponseRecoveryEnabled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSIngressPreviousResponseRecoveryEnabled"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload","Output":"=== RUN TestStripCodexSparkImageGenerationToolFromRawPayload\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/strips_image_generation_for_spark"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/strips_image_generation_for_spark","Output":"=== RUN TestStripCodexSparkImageGenerationToolFromRawPayload/strips_image_generation_for_spark\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/strips_image_generation_for_spark","Output":"--- PASS: TestStripCodexSparkImageGenerationToolFromRawPayload/strips_image_generation_for_spark (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/strips_image_generation_for_spark","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/strips_namespace_tools_for_spark"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/strips_namespace_tools_for_spark","Output":"=== RUN TestStripCodexSparkImageGenerationToolFromRawPayload/strips_namespace_tools_for_spark\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/strips_namespace_tools_for_spark","Output":"--- PASS: TestStripCodexSparkImageGenerationToolFromRawPayload/strips_namespace_tools_for_spark (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/strips_namespace_tools_for_spark","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/keeps_image_generation_for_non_spark"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/keeps_image_generation_for_non_spark","Output":"=== RUN TestStripCodexSparkImageGenerationToolFromRawPayload/keeps_image_generation_for_non_spark\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/keeps_image_generation_for_non_spark","Output":"--- PASS: TestStripCodexSparkImageGenerationToolFromRawPayload/keeps_image_generation_for_non_spark (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/keeps_image_generation_for_non_spark","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/noop_when_no_image_tool"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/noop_when_no_image_tool","Output":"=== RUN TestStripCodexSparkImageGenerationToolFromRawPayload/noop_when_no_image_tool\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/noop_when_no_image_tool","Output":"--- PASS: TestStripCodexSparkImageGenerationToolFromRawPayload/noop_when_no_image_tool (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/noop_when_no_image_tool","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload","Output":"--- PASS: TestStripCodexSparkImageGenerationToolFromRawPayload (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationToolsFromRawPayload"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationToolsFromRawPayload","Output":"=== RUN TestStripOpenAIImageGenerationToolsFromRawPayload\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationToolsFromRawPayload/flat_image_tool"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationToolsFromRawPayload/flat_image_tool","Output":"=== RUN TestStripOpenAIImageGenerationToolsFromRawPayload/flat_image_tool\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationToolsFromRawPayload/flat_image_tool","Output":"--- PASS: TestStripOpenAIImageGenerationToolsFromRawPayload/flat_image_tool (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationToolsFromRawPayload/flat_image_tool","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationToolsFromRawPayload/namespace_and_Responses_Lite_tools"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationToolsFromRawPayload/namespace_and_Responses_Lite_tools","Output":"=== RUN TestStripOpenAIImageGenerationToolsFromRawPayload/namespace_and_Responses_Lite_tools\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationToolsFromRawPayload/namespace_and_Responses_Lite_tools","Output":"--- PASS: TestStripOpenAIImageGenerationToolsFromRawPayload/namespace_and_Responses_Lite_tools (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationToolsFromRawPayload/namespace_and_Responses_Lite_tools","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationToolsFromRawPayload/non-image_namespace_is_unchanged"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationToolsFromRawPayload/non-image_namespace_is_unchanged","Output":"=== RUN TestStripOpenAIImageGenerationToolsFromRawPayload/non-image_namespace_is_unchanged\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationToolsFromRawPayload/non-image_namespace_is_unchanged","Output":"--- PASS: TestStripOpenAIImageGenerationToolsFromRawPayload/non-image_namespace_is_unchanged (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationToolsFromRawPayload/non-image_namespace_is_unchanged","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationToolsFromRawPayload","Output":"--- PASS: TestStripOpenAIImageGenerationToolsFromRawPayload (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationToolsFromRawPayload","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended","Output":"=== RUN TestOpenAIWSInputIsPrefixExtended\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended","Output":"=== PAUSE TestOpenAIWSInputIsPrefixExtended\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSJSONForCompare"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSJSONForCompare","Output":"=== RUN TestNormalizeOpenAIWSJSONForCompare\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSJSONForCompare","Output":"=== PAUSE TestNormalizeOpenAIWSJSONForCompare\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSJSONForCompare"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSJSONForCompareOrRaw"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSJSONForCompareOrRaw","Output":"=== RUN TestNormalizeOpenAIWSJSONForCompareOrRaw\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSJSONForCompareOrRaw","Output":"=== PAUSE TestNormalizeOpenAIWSJSONForCompareOrRaw\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSJSONForCompareOrRaw"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSPayloadWithoutInputAndPreviousResponseID"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSPayloadWithoutInputAndPreviousResponseID","Output":"=== RUN TestNormalizeOpenAIWSPayloadWithoutInputAndPreviousResponseID\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSPayloadWithoutInputAndPreviousResponseID","Output":"=== PAUSE TestNormalizeOpenAIWSPayloadWithoutInputAndPreviousResponseID\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSPayloadWithoutInputAndPreviousResponseID"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence","Output":"=== RUN TestOpenAIWSExtractNormalizedInputSequence\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence","Output":"=== PAUSE TestOpenAIWSExtractNormalizedInputSequence\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence","Output":"=== RUN TestBuildOpenAIWSReplayInputSequence\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence","Output":"=== PAUSE TestBuildOpenAIWSReplayInputSequence\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput","Output":"=== RUN TestOpenAIWSRawPayloadHasToolCallOutput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput","Output":"=== PAUSE TestOpenAIWSRawPayloadHasToolCallOutput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIWSPayloadInputSequence"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIWSPayloadInputSequence","Output":"=== RUN TestSetOpenAIWSPayloadInputSequence\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIWSPayloadInputSequence","Output":"=== PAUSE TestSetOpenAIWSPayloadInputSequence\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIWSPayloadInputSequence"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCombineOpenAIWSReplayItems"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCombineOpenAIWSReplayItems","Output":"=== RUN TestCombineOpenAIWSReplayItems\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCombineOpenAIWSReplayItems","Output":"=== PAUSE TestCombineOpenAIWSReplayItems\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCombineOpenAIWSReplayItems"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies","Output":"=== RUN TestOpenAIWSReplaySequenceSharesBodies\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies","Output":"=== PAUSE TestOpenAIWSReplaySequenceSharesBodies\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSSessionHeadersPrefersCodexHyphenHeader"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSSessionHeadersPrefersCodexHyphenHeader","Output":"=== RUN TestResolveOpenAIWSSessionHeadersPrefersCodexHyphenHeader\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSSessionHeadersPrefersCodexHyphenHeader","Output":"--- PASS: TestResolveOpenAIWSSessionHeadersPrefersCodexHyphenHeader (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSSessionHeadersPrefersCodexHyphenHeader","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSSessionHeadersFallsBackToLegacyHeader"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSSessionHeadersFallsBackToLegacyHeader","Output":"=== RUN TestResolveOpenAIWSSessionHeadersFallsBackToLegacyHeader\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSSessionHeadersFallsBackToLegacyHeader","Output":"--- PASS: TestResolveOpenAIWSSessionHeadersFallsBackToLegacyHeader (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSSessionHeadersFallsBackToLegacyHeader","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIWSRetryPayloadStrategy_KeepPromptCacheKey"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIWSRetryPayloadStrategy_KeepPromptCacheKey","Output":"=== RUN TestApplyOpenAIWSRetryPayloadStrategy_KeepPromptCacheKey\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIWSRetryPayloadStrategy_KeepPromptCacheKey","Output":"--- PASS: TestApplyOpenAIWSRetryPayloadStrategy_KeepPromptCacheKey (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIWSRetryPayloadStrategy_KeepPromptCacheKey","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIWSRetryPayloadStrategy_AttemptSixKeepsSemanticFields"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIWSRetryPayloadStrategy_AttemptSixKeepsSemanticFields","Output":"=== RUN TestApplyOpenAIWSRetryPayloadStrategy_AttemptSixKeepsSemanticFields\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIWSRetryPayloadStrategy_AttemptSixKeepsSemanticFields","Output":"--- PASS: TestApplyOpenAIWSRetryPayloadStrategy_AttemptSixKeepsSemanticFields (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIWSRetryPayloadStrategy_AttemptSixKeepsSemanticFields","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.838Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=9 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8392203+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.838Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=9 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8392203+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=9 account_type=apikey ws_host=127.0.0.1:62165 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8392203+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=9 attempt=1 event=response.create payload_keys=input,model,previous_response_id,stream,type payload_bytes=143 payload_key_sizes=input:34,type:15,previous_response_id:11,model:7,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=true has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8392203+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":9,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.8392203+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=9 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=unit-test-agent/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8392203+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=9 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_9_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8392203+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] continuation_probe account_id=9 account_type=apikey conn_id=oa_ws_9_1 previous_response_id=resp_prev_1 previous_response_id_kind=response_id preferred_conn_id=- conn_reused=false store_disabled=false session_hash=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_turn_state=false turn_state_len=0 has_prompt_cache_key=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8392203+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=9 conn_id=oa_ws_9_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8392203+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=9 conn_id=oa_ws_9_1 stream=false payload_bytes=143 previous_response_id=resp_prev_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8392203+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=9 conn_id=oa_ws_9_1 idx=1 type=response.created bytes=77 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8392203+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=9 conn_id=oa_ws_9_1 idx=2 type=response.completed bytes=168 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8392203+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=9 conn_id=oa_ws_9_1 response_id=resp_new_1 stream=false duration_ms=0 events=2 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.created last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8392203+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=9 request_id=resp_new_1 stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8397272+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8397272+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8397272+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_UsesPatchedBodyAfterValidationDecode"}
- {"Time":"2026-09-12T11:38:53.8397272+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_UsesPatchedBodyAfterValidationDecode","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_UsesPatchedBodyAfterValidationDecode\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8397272+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_UsesPatchedBodyAfterValidationDecode","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=10 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.4 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8397272+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_UsesPatchedBodyAfterValidationDecode","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"[OpenAI] /responses image_generation request inbound_model=gpt-5.4 mapped_model=gpt-5.4 account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8397272+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_UsesPatchedBodyAfterValidationDecode","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=10 account_type=apikey model=gpt-5.4 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8397272+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_UsesPatchedBodyAfterValidationDecode","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=10 account_type=apikey ws_host=127.0.0.1:62167 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8397272+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_UsesPatchedBodyAfterValidationDecode","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=10 attempt=1 event=response.create payload_keys=input,model,stream,tools,type payload_bytes=144 payload_key_sizes=input:34,tools:28,type:15,model:7,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8397272+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_UsesPatchedBodyAfterValidationDecode","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":10,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.8397272+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_UsesPatchedBodyAfterValidationDecode","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=10 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=unit-test-agent/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8397272+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_UsesPatchedBodyAfterValidationDecode","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=10 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_10_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8402359+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_UsesPatchedBodyAfterValidationDecode","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=10 conn_id=oa_ws_10_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8402359+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_UsesPatchedBodyAfterValidationDecode","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=10 conn_id=oa_ws_10_1 stream=false payload_bytes=144 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8402359+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_UsesPatchedBodyAfterValidationDecode","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=10 conn_id=oa_ws_10_1 idx=1 type=response.completed bytes=143 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8402359+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_UsesPatchedBodyAfterValidationDecode","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=10 conn_id=oa_ws_10_1 response_id=resp_patched_ws_1 stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8402359+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_UsesPatchedBodyAfterValidationDecode","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=10 request_id=resp_patched_ws_1 stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8402359+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_UsesPatchedBodyAfterValidationDecode","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_UsesPatchedBodyAfterValidationDecode (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8402359+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_UsesPatchedBodyAfterValidationDecode","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8402359+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs"}
- {"Time":"2026-09-12T11:38:53.8402359+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8402359+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=10 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.4 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8402359+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[OpenAI] /responses image_generation request inbound_model=gpt-5.4 mapped_model=gpt-5.4 account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8402359+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=10 account_type=apikey model=gpt-5.4 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8402359+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=10 account_type=apikey ws_host=127.0.0.1:62169 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8402359+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=10 attempt=1 event=response.create payload_keys=input,model,stream,tool_choice,tools,type payload_bytes=195 payload_key_sizes=tools:63,tool_choice:25,type:15,model:7,input:4,stream:1 input_summary=- stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8402359+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":10,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.8402359+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=10 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=- header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=10 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_10_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=10 conn_id=oa_ws_10_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=10 conn_id=oa_ws_10_1 stream=false payload_bytes=195 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=10 conn_id=oa_ws_10_1 idx=1 type=response.output_item.done bytes=136 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=10 conn_id=oa_ws_10_1 idx=2 type=response.completed bytes=232 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=10 conn_id=oa_ws_10_1 response_id=resp_ws_image_1 stream=false duration_ms=0 events=2 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.output_item.done last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=10 request_id=resp_ws_image_1 stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_BuildOpenAIWSHeadersPreservesCodexIdentity"}
- {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_BuildOpenAIWSHeadersPreservesCodexIdentity","Output":"=== RUN TestOpenAIGatewayService_BuildOpenAIWSHeadersPreservesCodexIdentity\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_BuildOpenAIWSHeadersPreservesCodexIdentity","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":0,\"final_model\":\"\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_BuildOpenAIWSHeadersPreservesCodexIdentity","Output":"--- PASS: TestOpenAIGatewayService_BuildOpenAIWSHeadersPreservesCodexIdentity (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_BuildOpenAIWSHeadersPreservesCodexIdentity","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_BuildOpenAIWSHeadersDeviceModePreservesNamespacedClientSessionIdentity"}
- {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_BuildOpenAIWSHeadersDeviceModePreservesNamespacedClientSessionIdentity","Output":"=== RUN TestOpenAIGatewayService_BuildOpenAIWSHeadersDeviceModePreservesNamespacedClientSessionIdentity\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_BuildOpenAIWSHeadersDeviceModePreservesNamespacedClientSessionIdentity","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":1300,\"final_model\":\"\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_BuildOpenAIWSHeadersDeviceModePreservesNamespacedClientSessionIdentity","Output":"--- PASS: TestOpenAIGatewayService_BuildOpenAIWSHeadersDeviceModePreservesNamespacedClientSessionIdentity (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_BuildOpenAIWSHeadersDeviceModePreservesNamespacedClientSessionIdentity","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogOpenAIWSBindResponseAccountWarn"}
- {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogOpenAIWSBindResponseAccountWarn","Output":"=== RUN TestLogOpenAIWSBindResponseAccountWarn\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogOpenAIWSBindResponseAccountWarn","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"openai.ws_bind_response_account_failed\",\"service\":\"sub2api\",\"env\":\"test\",\"group_id\":1,\"account_id\":2,\"response_id\":\"resp_err\",\"error\":\"bind failed\"}\n"}
- {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogOpenAIWSBindResponseAccountWarn","Output":"--- PASS: TestLogOpenAIWSBindResponseAccountWarn (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogOpenAIWSBindResponseAccountWarn","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent"}
- {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=1301 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=custom-original-model stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[OpenAI] Model mapping applied: custom-original-model -\u003e gpt-5.1 (account: openai-rewrite, isCodexCLI: true)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=1301 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=1301 account_type=apikey ws_host=api.openai.com ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=1301 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=106 payload_key_sizes=input:34,type:15,model:7,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":1301,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=1301 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=codex_cli_rs/0.98.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=1301 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_1301_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=1301 conn_id=oa_ws_1301_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=1301 conn_id=oa_ws_1301_1 stream=false payload_bytes=106 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=1301 conn_id=oa_ws_1301_1 idx=1 type=response.completed bytes=406 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[CodexToolCorrector] Corrected tool call: apply_patch -\u003e edit (total: 1)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_tool_corrector\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[CodexToolCorrector] Renamed 'file_path' to 'filePath' in edit tool\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_tool_corrector\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[CodexToolCorrector] Renamed 'old_string' to 'oldString' in edit tool\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_tool_corrector\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[CodexToolCorrector] Renamed 'new_string' to 'newString' in edit tool\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_tool_corrector\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[CodexToolCorrector] Corrected tool call: apply_patch -\u003e edit (total: 2)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_tool_corrector\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[CodexToolCorrector] Renamed 'file_path' to 'filePath' in edit tool\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_tool_corrector\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[CodexToolCorrector] Renamed 'old_string' to 'oldString' in edit tool\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_tool_corrector\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[CodexToolCorrector] Renamed 'new_string' to 'newString' in edit tool\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_tool_corrector\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=1301 conn_id=oa_ws_1301_1 response_id=resp_model_tool_1 stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=1301 request_id=resp_model_tool_1 stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess"}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=1302 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.5 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=1302 account_type=apikey model=gpt-5.5 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=1302 account_type=apikey ws_host=api.openai.com ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=1302 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=75 payload_key_sizes=type:15,model:7,input:5,stream:1 input_summary=- stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":1302,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=1302 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=codex_cli_rs/0.98.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=1302 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_1302_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=1302 conn_id=oa_ws_1302_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=1302 conn_id=oa_ws_1302_1 stream=false payload_bytes=75 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=1302 conn_id=oa_ws_1302_1 idx=1 type=response.fail bytes=137 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:53.841Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1302,\"status_code\":500}\n"}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:53.841Z\",\"logger\":\"slog\",\"msg\":\"openai_model_transient_state\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1302,\"model\":\"gpt-5.5\",\"failure_streak\":2,\"cooldown_ms\":10000,\"block_scope\":\"account_model\"}\n"}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=1302 conn_id=oa_ws_1302_1 response_id=resp_fail_1 stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.fail last_event=response.fail first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=1302 request_id=resp_failed_1 stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPayloadString_OnlyAcceptsStringValues"}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPayloadString_OnlyAcceptsStringValues","Output":"=== RUN TestOpenAIWSPayloadString_OnlyAcceptsStringValues\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPayloadString_OnlyAcceptsStringValues","Output":"--- PASS: TestOpenAIWSPayloadString_OnlyAcceptsStringValues (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPayloadString_OnlyAcceptsStringValues","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne"}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=19 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=19 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=19 account_type=apikey ws_host=127.0.0.1:62171 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8417648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=19 attempt=1 event=response.create payload_keys=input,model,previous_response_id,stream,type payload_bytes=147 payload_key_sizes=input:34,previous_response_id:15,type:15,model:7,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=true has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8417648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":19,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.8417648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=19 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=codex_cli_rs/0.98.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8417648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=19 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_19_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8417648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] continuation_probe account_id=19 account_type=apikey conn_id=oa_ws_19_1 previous_response_id=resp_prev_reuse previous_response_id_kind=response_id preferred_conn_id=- conn_reused=false store_disabled=false session_hash=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_turn_state=false turn_state_len=0 has_prompt_cache_key=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8417648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=19 conn_id=oa_ws_19_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8417648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=19 conn_id=oa_ws_19_1 stream=false payload_bytes=147 previous_response_id=resp_prev_reuse\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8417648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=19 conn_id=oa_ws_19_1 idx=1 type=response.created bytes=79 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8417648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=19 conn_id=oa_ws_19_1 idx=2 type=response.completed bytes=126 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8417648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=19 conn_id=oa_ws_19_1 response_id=resp_reuse_1 stream=false duration_ms=0 events=2 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.created last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8417648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=19 request_id=resp_reuse_1 stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8417648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=19 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8417648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=19 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8417648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=19 account_type=apikey ws_host=127.0.0.1:62171 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8417648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=19 attempt=1 event=response.create payload_keys=input,model,previous_response_id,stream,type payload_bytes=147 payload_key_sizes=input:34,previous_response_id:15,type:15,model:7,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=true has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8417648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":19,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.8422725+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=19 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=codex_cli_rs/0.98.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8422725+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=19 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_19_1 conn_reused=true conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8422725+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] continuation_probe account_id=19 account_type=apikey conn_id=oa_ws_19_1 previous_response_id=resp_prev_reuse previous_response_id_kind=response_id preferred_conn_id=- conn_reused=true store_disabled=false session_hash=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_turn_state=false turn_state_len=0 has_prompt_cache_key=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8422725+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=19 conn_id=oa_ws_19_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8422725+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=19 conn_id=oa_ws_19_1 stream=false payload_bytes=147 previous_response_id=resp_prev_reuse\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8422725+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=19 conn_id=oa_ws_19_1 idx=1 type=response.created bytes=79 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8422725+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=19 conn_id=oa_ws_19_1 idx=2 type=response.completed bytes=126 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8422725+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=19 conn_id=oa_ws_19_1 response_id=resp_reuse_2 stream=false duration_ms=0 events=2 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.created last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8422725+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=19 request_id=resp_reuse_2 stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8422725+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8422725+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8422725+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthStoreFalseByDefault"}
- {"Time":"2026-09-12T11:38:53.8422725+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthStoreFalseByDefault","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_OAuthStoreFalseByDefault\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8422725+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthStoreFalseByDefault","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=29 account_type=oauth transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8422725+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthStoreFalseByDefault","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[OpenAI] Upstream model resolved: gpt-5.1 -\u003e gpt-5.4 (account: openai-oauth, type: oauth, isCodexCLI: true)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8427844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthStoreFalseByDefault","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=29 account_type=oauth model=gpt-5.4 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8427844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthStoreFalseByDefault","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=29 account_type=oauth ws_host=chatgpt.com ws_path=/backend-api/codex/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8427844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthStoreFalseByDefault","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=29 attempt=1 event=response.create payload_keys=input,instructions,model,store,stream,type payload_bytes=21733 payload_key_sizes=instructions:21346,input:57,type:15,model:7,store:1,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=true payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8427844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthStoreFalseByDefault","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":29,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.8427844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthStoreFalseByDefault","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=29 account_type=oauth transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=3c8f98fdfdc1... has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=true store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=codex-tui/0.146.0 (Ubuntu 22.4.0; x86_64) xterm-256color header_openai_beta=responses_websockets=2026-02-06 header_originator=codex-tui header_accept_language=- header_session_id=bee569cb16ab7b77 header_conversation_id=38c3c29f27199cd3 session_id_source=header_session_id conversation_id_source=header_conversation_id has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=true has_conversation_id=true proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8427844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthStoreFalseByDefault","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=29 account_type=oauth transport=responses_websockets_v2 conn_id=oa_ws_29_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8427844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthStoreFalseByDefault","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=29 conn_id=oa_ws_29_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8427844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthStoreFalseByDefault","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=29 conn_id=oa_ws_29_1 stream=false payload_bytes=21733 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8427844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthStoreFalseByDefault","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=29 conn_id=oa_ws_29_1 idx=1 type=response.completed bytes=125 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8427844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthStoreFalseByDefault","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=29 conn_id=oa_ws_29_1 response_id=resp_oauth_1 stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8427844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthStoreFalseByDefault","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=29 request_id=resp_oauth_1 stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8427844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthStoreFalseByDefault","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_OAuthStoreFalseByDefault (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8427844+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthStoreFalseByDefault","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8427844+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthSanitizesInvalidNativeToolItemID"}
- {"Time":"2026-09-12T11:38:53.8427844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthSanitizesInvalidNativeToolItemID","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_OAuthSanitizesInvalidNativeToolItemID\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8427844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthSanitizesInvalidNativeToolItemID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=5662 account_type=oauth transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.6-sol stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthSanitizesInvalidNativeToolItemID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=5662 account_type=oauth model=gpt-5.6-sol stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthSanitizesInvalidNativeToolItemID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=5662 account_type=oauth ws_host=chatgpt.com ws_path=/backend-api/codex/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthSanitizesInvalidNativeToolItemID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=5662 attempt=1 event=response.create payload_keys=input,instructions,model,store,stream,type payload_bytes=296 payload_key_sizes=input:154,instructions:18,type:15,model:11,store:1,stream:1 input_summary=items=2,text_chars=0,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=true payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthSanitizesInvalidNativeToolItemID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":5662,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthSanitizesInvalidNativeToolItemID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=5662 account_type=oauth transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=true store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=codex-tui/0.146.0 (Ubuntu 22.4.0; x86_64) xterm-256color header_openai_beta=responses_websockets=2026-02-06 header_originator=codex-tui header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthSanitizesInvalidNativeToolItemID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=5662 account_type=oauth transport=responses_websockets_v2 conn_id=oa_ws_5662_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthSanitizesInvalidNativeToolItemID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=5662 conn_id=oa_ws_5662_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthSanitizesInvalidNativeToolItemID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=5662 conn_id=oa_ws_5662_1 stream=false payload_bytes=296 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthSanitizesInvalidNativeToolItemID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=5662 conn_id=oa_ws_5662_1 idx=1 type=response.completed bytes=140 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthSanitizesInvalidNativeToolItemID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=5662 conn_id=oa_ws_5662_1 response_id=resp_oauth_tool_history stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthSanitizesInvalidNativeToolItemID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=5662 request_id=resp_oauth_tool_history stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthSanitizesInvalidNativeToolItemID","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_OAuthSanitizesInvalidNativeToolItemID (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthSanitizesInvalidNativeToolItemID","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility"}
- {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_desktop_ua"}
- {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_desktop_ua","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_desktop_ua\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_desktop_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=129 account_type=oauth transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_desktop_ua","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[OpenAI] Upstream model resolved: gpt-5.1 -\u003e gpt-5.4 (account: openai-oauth, type: oauth, isCodexCLI: true)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_desktop_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=129 account_type=oauth model=gpt-5.4 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8438079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_desktop_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=129 account_type=oauth ws_host=chatgpt.com ws_path=/backend-api/codex/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8438079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_desktop_ua","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=129 attempt=1 event=response.create payload_keys=input,instructions,model,store,stream,type payload_bytes=21707 payload_key_sizes=instructions:21346,input:34,type:15,model:7,store:1,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=true payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8438079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_desktop_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":129,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.8438079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_desktop_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=129 account_type=oauth transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=true store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=codex-tui/0.146.0 (Ubuntu 22.4.0; x86_64) xterm-256color header_openai_beta=responses_websockets=2026-02-06 header_originator=codex-tui header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8438079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_desktop_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=129 account_type=oauth transport=responses_websockets_v2 conn_id=oa_ws_129_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8438079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_desktop_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=129 conn_id=oa_ws_129_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8438079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_desktop_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=129 conn_id=oa_ws_129_1 stream=false payload_bytes=21707 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8438079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_desktop_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=129 conn_id=oa_ws_129_1 idx=1 type=response.completed bytes=134 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8438079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_desktop_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=129 conn_id=oa_ws_129_1 response_id=resp_oauth_originator stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8438079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_desktop_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=129 request_id=resp_oauth_originator stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8438079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_desktop_ua","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_desktop_ua (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8438079+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_desktop_ua","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8438079+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/mismatched_originator"}
- {"Time":"2026-09-12T11:38:53.8438079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/mismatched_originator","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/mismatched_originator\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8438079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/mismatched_originator","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=129 account_type=oauth transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8438079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/mismatched_originator","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[OpenAI] Upstream model resolved: gpt-5.1 -\u003e gpt-5.4 (account: openai-oauth, type: oauth, isCodexCLI: true)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8443163+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/mismatched_originator","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=129 account_type=oauth model=gpt-5.4 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8443163+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/mismatched_originator","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=129 account_type=oauth ws_host=chatgpt.com ws_path=/backend-api/codex/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8443163+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/mismatched_originator","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=129 attempt=1 event=response.create payload_keys=input,instructions,model,store,stream,type payload_bytes=21707 payload_key_sizes=instructions:21346,input:34,type:15,model:7,store:1,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=true payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8443163+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/mismatched_originator","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":129,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.8443163+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/mismatched_originator","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=129 account_type=oauth transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=true store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=codex-tui/0.146.0 (Ubuntu 22.4.0; x86_64) xterm-256color header_openai_beta=responses_websockets=2026-02-06 header_originator=codex-tui header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8443163+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/mismatched_originator","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=129 account_type=oauth transport=responses_websockets_v2 conn_id=oa_ws_129_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8443163+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/mismatched_originator","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=129 conn_id=oa_ws_129_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8443163+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/mismatched_originator","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=129 conn_id=oa_ws_129_1 stream=false payload_bytes=21707 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8443163+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/mismatched_originator","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=129 conn_id=oa_ws_129_1 idx=1 type=response.completed bytes=134 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8443163+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/mismatched_originator","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=129 conn_id=oa_ws_129_1 response_id=resp_oauth_originator stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8443163+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/mismatched_originator","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=129 request_id=resp_oauth_originator stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8443163+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/mismatched_originator","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/mismatched_originator (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8443163+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/mismatched_originator","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8443163+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/tui_identity"}
- {"Time":"2026-09-12T11:38:53.8443163+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/tui_identity","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/tui_identity\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8443163+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/tui_identity","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=129 account_type=oauth transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8443163+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/tui_identity","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[OpenAI] Upstream model resolved: gpt-5.1 -\u003e gpt-5.4 (account: openai-oauth, type: oauth, isCodexCLI: true)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8448402+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/tui_identity","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=129 account_type=oauth model=gpt-5.4 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8448402+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/tui_identity","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=129 account_type=oauth ws_host=chatgpt.com ws_path=/backend-api/codex/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8448402+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/tui_identity","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=129 attempt=1 event=response.create payload_keys=input,instructions,model,store,stream,type payload_bytes=21707 payload_key_sizes=instructions:21346,input:34,type:15,model:7,store:1,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=true payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8448402+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/tui_identity","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":129,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.8448402+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/tui_identity","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=129 account_type=oauth transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=true store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=codex-tui/0.146.0 (Ubuntu 22.4.0; x86_64) xterm-256color header_openai_beta=responses_websockets=2026-02-06 header_originator=codex-tui header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8448402+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/tui_identity","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=129 account_type=oauth transport=responses_websockets_v2 conn_id=oa_ws_129_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8448402+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/tui_identity","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=129 conn_id=oa_ws_129_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8448402+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/tui_identity","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=129 conn_id=oa_ws_129_1 stream=false payload_bytes=21707 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8448402+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/tui_identity","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=129 conn_id=oa_ws_129_1 idx=1 type=response.completed bytes=134 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8448402+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/tui_identity","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=129 conn_id=oa_ws_129_1 response_id=resp_oauth_originator stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8448402+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/tui_identity","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=129 request_id=resp_oauth_originator stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8448402+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/tui_identity","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/tui_identity (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8448402+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/tui_identity","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8448402+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_originator_without_ua"}
- {"Time":"2026-09-12T11:38:53.8448402+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_originator_without_ua","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_originator_without_ua\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8448402+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_originator_without_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=129 account_type=oauth transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8448402+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_originator_without_ua","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[OpenAI] Upstream model resolved: gpt-5.1 -\u003e gpt-5.4 (account: openai-oauth, type: oauth, isCodexCLI: true)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8453475+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_originator_without_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=129 account_type=oauth model=gpt-5.4 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8453475+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_originator_without_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=129 account_type=oauth ws_host=chatgpt.com ws_path=/backend-api/codex/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8453475+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_originator_without_ua","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=129 attempt=1 event=response.create payload_keys=input,instructions,model,store,stream,type payload_bytes=21707 payload_key_sizes=instructions:21346,input:34,type:15,model:7,store:1,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=true payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8453475+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_originator_without_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":129,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.8453475+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_originator_without_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=129 account_type=oauth transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=true store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=codex-tui/0.146.0 (Ubuntu 22.4.0; x86_64) xterm-256color header_openai_beta=responses_websockets=2026-02-06 header_originator=codex-tui header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8453475+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_originator_without_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=129 account_type=oauth transport=responses_websockets_v2 conn_id=oa_ws_129_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8453475+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_originator_without_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=129 conn_id=oa_ws_129_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8453475+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_originator_without_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=129 conn_id=oa_ws_129_1 stream=false payload_bytes=21707 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8453475+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_originator_without_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=129 conn_id=oa_ws_129_1 idx=1 type=response.completed bytes=134 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8453475+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_originator_without_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=129 conn_id=oa_ws_129_1 response_id=resp_oauth_originator stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8453475+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_originator_without_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=129 request_id=resp_oauth_originator stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8453475+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_originator_without_ua","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_originator_without_ua (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8453475+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_originator_without_ua","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8453475+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8453475+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8453475+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthHonorsAccountUserAgent"}
- {"Time":"2026-09-12T11:38:53.8453475+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthHonorsAccountUserAgent","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_OAuthHonorsAccountUserAgent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8453475+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthHonorsAccountUserAgent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=130 account_type=oauth transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8453475+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthHonorsAccountUserAgent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[OpenAI] Upstream model resolved: gpt-5.1 -\u003e gpt-5.4 (account: openai-oauth-custom-ua, type: oauth, isCodexCLI: false)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8458594+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthHonorsAccountUserAgent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=130 account_type=oauth model=gpt-5.4 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8458594+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthHonorsAccountUserAgent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=130 account_type=oauth ws_host=chatgpt.com ws_path=/backend-api/codex/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8458594+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthHonorsAccountUserAgent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=130 attempt=1 event=response.create payload_keys=input,instructions,model,store,stream,type payload_bytes=21707 payload_key_sizes=instructions:21346,input:34,type:15,model:7,store:1,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=true payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8458594+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthHonorsAccountUserAgent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":130,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.8458594+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthHonorsAccountUserAgent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=130 account_type=oauth transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=true store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=codex-tui/0.146.0 (Mac OS X 15.1.0; arm64) iTerm.app header_openai_beta=responses_websockets=2026-02-06 header_originator=codex-tui header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8458594+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthHonorsAccountUserAgent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=130 account_type=oauth transport=responses_websockets_v2 conn_id=oa_ws_130_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8458594+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthHonorsAccountUserAgent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=130 conn_id=oa_ws_130_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8458594+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthHonorsAccountUserAgent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=130 conn_id=oa_ws_130_1 stream=false payload_bytes=21707 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8458594+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthHonorsAccountUserAgent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=130 conn_id=oa_ws_130_1 idx=1 type=response.completed bytes=134 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8458594+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthHonorsAccountUserAgent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=130 conn_id=oa_ws_130_1 response_id=resp_oauth_account_ua stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8458594+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthHonorsAccountUserAgent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=130 request_id=resp_oauth_account_ua stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8458594+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthHonorsAccountUserAgent","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_OAuthHonorsAccountUserAgent (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8458594+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthHonorsAccountUserAgent","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8458594+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_HeaderSessionFallbackFromPromptCacheKey"}
- {"Time":"2026-09-12T11:38:53.8458594+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_HeaderSessionFallbackFromPromptCacheKey","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_HeaderSessionFallbackFromPromptCacheKey\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8458594+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_HeaderSessionFallbackFromPromptCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=31 account_type=oauth transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8458594+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_HeaderSessionFallbackFromPromptCacheKey","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[OpenAI] Upstream model resolved: gpt-5.1 -\u003e gpt-5.4 (account: openai-oauth, type: oauth, isCodexCLI: true)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8463848+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_HeaderSessionFallbackFromPromptCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.846Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=31 account_type=oauth model=gpt-5.4 stream=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8463848+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_HeaderSessionFallbackFromPromptCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.846Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=31 account_type=oauth ws_host=chatgpt.com ws_path=/backend-api/codex/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8463848+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_HeaderSessionFallbackFromPromptCacheKey","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.846Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=31 attempt=1 event=response.create payload_keys=input,instructions,model,prompt_cache_key,store,stream,type payload_bytes=21736 payload_key_sizes=instructions:21346,input:31,type:15,prompt_cache_key:10,model:7,store:1 input_summary=items=1,text_chars=2,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=true payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=true has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8463848+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_HeaderSessionFallbackFromPromptCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.846Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":31,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.8463848+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_HeaderSessionFallbackFromPromptCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.846Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=31 account_type=oauth transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=fb91e8ac9180... has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=true store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=codex-tui/0.146.0 (Ubuntu 22.4.0; x86_64) xterm-256color header_openai_beta=responses_websockets=2026-02-06 header_originator=codex-tui header_accept_language=- header_session_id=6805120a6afa07a7 header_conversation_id=- session_id_source=prompt_cache_key conversation_id_source=none has_prompt_cache_key=true has_chatgpt_account_id=false has_authorization=true has_session_id=true has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8463848+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_HeaderSessionFallbackFromPromptCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.846Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=31 account_type=oauth transport=responses_websockets_v2 conn_id=oa_ws_31_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8463848+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_HeaderSessionFallbackFromPromptCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.846Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=31 conn_id=oa_ws_31_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_HeaderSessionFallbackFromPromptCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.846Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=31 conn_id=oa_ws_31_1 stream=true payload_bytes=21736 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_HeaderSessionFallbackFromPromptCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.846Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=31 conn_id=oa_ws_31_1 idx=1 type=response.completed bytes=134 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_HeaderSessionFallbackFromPromptCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.846Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=31 conn_id=oa_ws_31_1 response_id=resp_prompt_cache_key stream=true duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=true client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_HeaderSessionFallbackFromPromptCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.846Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=31 request_id=resp_prompt_cache_key stream=true has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_HeaderSessionFallbackFromPromptCacheKey","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_HeaderSessionFallbackFromPromptCacheKey (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_HeaderSessionFallbackFromPromptCacheKey","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey"}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.846Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=4405 account_type=oauth transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.846Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=4405 account_type=oauth model=gpt-5.2 stream=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.846Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=4405 account_type=oauth ws_host=chatgpt.com ws_path=/backend-api/codex/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.846Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=4405 attempt=1 event=response.create payload_keys=client_metadata,input,instructions,model,prompt_cache_key,store,stream,type payload_bytes=22894 payload_key_sizes=instructions:21671,client_metadata:613,prompt_cache_key:36,input:31,type:15,model:7 input_summary=items=1,text_chars=2,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=true payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=true has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.846Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":4405,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.846Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=4405 account_type=oauth transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=6d83ac66dd39... has_turn_state=false turn_state_len=0 has_turn_metadata=true turn_metadata_len=167 store_disabled=true store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=codex-tui/0.146.0 (Ubuntu 22.4.0; x86_64) xterm-256color header_openai_beta=responses_websockets=2026-02-06 header_originator=codex-tui header_accept_language=- header_session_id=4065c8ec-c2ce-48bd-9198-53c4c5e30d6e header_conversation_id=- session_id_source=header_session-id conversation_id_source=none has_prompt_cache_key=true has_chatgpt_account_id=true has_authorization=true has_session_id=true has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=4405 account_type=oauth transport=responses_websockets_v2 conn_id=oa_ws_4405_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=4405 conn_id=oa_ws_4405_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=4405 conn_id=oa_ws_4405_1 stream=true payload_bytes=22894 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=4405 conn_id=oa_ws_4405_1 idx=1 type=response.completed bytes=132 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=4405 conn_id=oa_ws_4405_1 response_id=resp_ws_fingerprint stream=true duration_ms=1 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=true client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=4405 request_id=resp_ws_fingerprint stream=true has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseDoneUsageParsed"}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseDoneUsageParsed","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_ResponseDoneUsageParsed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseDoneUsageParsed","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=32 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseDoneUsageParsed","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=32 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseDoneUsageParsed","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=32 account_type=apikey ws_host=api.openai.com ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseDoneUsageParsed","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=32 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=103 payload_key_sizes=input:31,type:15,model:7,stream:1 input_summary=items=1,text_chars=2,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseDoneUsageParsed","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":32,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseDoneUsageParsed","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=32 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=unit-test-agent/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseDoneUsageParsed","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=32 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_32_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseDoneUsageParsed","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=32 conn_id=oa_ws_32_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseDoneUsageParsed","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=32 conn_id=oa_ws_32_1 stream=false payload_bytes=103 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseDoneUsageParsed","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=32 conn_id=oa_ws_32_1 idx=1 type=response.done bytes=242 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseDoneUsageParsed","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=32 conn_id=oa_ws_32_1 response_id=resp_done_usage stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.done last_event=response.done first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseDoneUsageParsed","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=32 request_id=resp_done_usage stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseDoneUsageParsed","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_ResponseDoneUsageParsed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseDoneUsageParsed","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv1_Unsupported"}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv1_Unsupported","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv1_Unsupported\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv1_Unsupported","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv1_Unsupported (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv1_Unsupported","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect"}
- {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8479956+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=49 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8479956+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=49 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8479956+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=49 account_type=apikey ws_host=127.0.0.1:62173 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8479956+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=49 attempt=1 event=response.create payload_keys=client_metadata,input,model,stream,type payload_bytes=164 payload_key_sizes=client_metadata:37,input:34,type:15,model:7,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8479956+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":49,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.8479956+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=49 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=6bb9e32bb454... has_turn_state=false turn_state_len=0 has_turn_metadata=true turn_metadata_len=11 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=- header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=session_turn_state header_conversation_id=- session_id_source=header_session_id conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=true has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8479956+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=49 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_49_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8479956+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=49 conn_id=oa_ws_49_1 has_turn_state=true turn_state_len=16\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8479956+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=49 conn_id=oa_ws_49_1 stream=false payload_bytes=164 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8485043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.848Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=49 conn_id=oa_ws_49_1 idx=1 type=response.completed bytes=125 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8485043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.848Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=49 conn_id=oa_ws_49_1 response_id=resp_turn_1 stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8485043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.848Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=49 request_id=resp_turn_1 stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8485043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.848Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=49 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8485043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.848Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=49 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8485043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.848Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=49 account_type=apikey ws_host=127.0.0.1:62173 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8485043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.848Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=49 attempt=1 event=response.create payload_keys=client_metadata,input,model,stream,type payload_bytes=164 payload_key_sizes=client_metadata:37,input:34,type:15,model:7,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8485043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.848Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":49,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.8485043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.848Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=49 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=6bb9e32bb454... has_turn_state=true turn_state_len=16 has_turn_metadata=true turn_metadata_len=11 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=- header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=session_turn_state header_conversation_id=- session_id_source=header_session_id conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=true has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8485043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.848Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=49 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_49_2 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8485043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.848Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=49 conn_id=oa_ws_49_2 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8485043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.848Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=49 conn_id=oa_ws_49_2 stream=false payload_bytes=164 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=49 conn_id=oa_ws_49_2 idx=1 type=response.completed bytes=125 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=49 conn_id=oa_ws_49_2 response_id=resp_turn_2 stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=49 request_id=resp_turn_2 stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm"}
- {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=59 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=59 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=59 account_type=apikey ws_host=api.openai.com ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=59 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=106 payload_key_sizes=input:34,type:15,model:7,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":59,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=59 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=5d7dff2e0b90... has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=- header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=session-prewarm header_conversation_id=- session_id_source=header_session_id conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=true has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=59 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_59_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=59 conn_id=oa_ws_59_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] prewarm_start account_id=59 conn_id=oa_ws_59_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] prewarm_write_sent account_id=59 conn_id=oa_ws_59_1 payload_bytes=123\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] prewarm_event account_id=59 conn_id=oa_ws_59_1 idx=1 type=response.completed bytes=127\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] prewarm_done account_id=59 conn_id=oa_ws_59_1 response_id=resp_prewarm_1 events=1 terminal_events=1 duration_ms=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=59 conn_id=oa_ws_59_1 stream=false payload_bytes=106 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=59 conn_id=oa_ws_59_1 idx=1 type=response.completed bytes=124 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=59 conn_id=oa_ws_59_1 response_id=resp_main_1 stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=59 request_id=resp_main_1 stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PrewarmReadHonorsParentContext"}
- {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PrewarmReadHonorsParentContext","Output":"=== RUN TestOpenAIGatewayService_PrewarmReadHonorsParentContext\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PrewarmReadHonorsParentContext","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] prewarm_start account_id=601 conn_id=prewarm_ctx_conn\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PrewarmReadHonorsParentContext","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] prewarm_write_sent account_id=601 conn_id=prewarm_ctx_conn payload_bytes=61\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PrewarmReadHonorsParentContext","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] prewarm_read_fail account_id=601 conn_id=prewarm_ctx_conn close_status=- close_reason=- cause=context deadline exceeded events=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PrewarmReadHonorsParentContext","Output":"--- PASS: TestOpenAIGatewayService_PrewarmReadHonorsParentContext (0.04s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PrewarmReadHonorsParentContext","Elapsed":0.04}
- {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse"}
- {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=69 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=69 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=69 account_type=apikey ws_host=api.openai.com ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=69 attempt=1 event=response.create payload_keys=client_metadata,input,model,stream,type payload_bytes=172 payload_key_sizes=client_metadata:45,input:34,type:15,model:7,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":69,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=69 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=2bbed1f6a0f2... has_turn_state=false turn_state_len=0 has_turn_metadata=true turn_metadata_len=19 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=- header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=session-metadata-reuse header_conversation_id=- session_id_source=header_session_id conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=true has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=69 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_69_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=69 conn_id=oa_ws_69_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=69 conn_id=oa_ws_69_1 stream=false payload_bytes=172 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=69 conn_id=oa_ws_69_1 idx=1 type=response.completed bytes=124 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=69 conn_id=oa_ws_69_1 response_id=resp_meta_1 stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=69 request_id=resp_meta_1 stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=69 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=69 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=69 account_type=apikey ws_host=api.openai.com ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=69 attempt=1 event=response.create payload_keys=client_metadata,input,model,stream,type payload_bytes=172 payload_key_sizes=client_metadata:45,input:34,type:15,model:7,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":69,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=69 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=2bbed1f6a0f2... has_turn_state=false turn_state_len=0 has_turn_metadata=true turn_metadata_len=19 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=- header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=session-metadata-reuse header_conversation_id=- session_id_source=header_session_id conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=true has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=69 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_69_1 conn_reused=true conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=69 conn_id=oa_ws_69_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=69 conn_id=oa_ws_69_1 stream=false payload_bytes=172 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=69 conn_id=oa_ws_69_1 idx=1 type=response.completed bytes=124 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=69 conn_id=oa_ws_69_1 response_id=resp_meta_2 stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=69 request_id=resp_meta_2 stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation"}
- {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8901968+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=79 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8901968+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=79 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8901968+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=79 account_type=apikey ws_host=127.0.0.1:62176 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8901968+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=79 attempt=1 event=response.create payload_keys=input,model,store,stream,type payload_bytes=120 payload_key_sizes=input:34,type:15,model:7,store:1,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8901968+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":79,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.8901968+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=79 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=22fb4eb406f4... has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=true store_disabled_conn_mode=strict retry_last_reason=- force_new_conn=true header_user_agent=- header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=session_store_false_a header_conversation_id=- session_id_source=header_session_id conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=true has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8907133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=79 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_79_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8907133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=79 conn_id=oa_ws_79_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8907133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=79 conn_id=oa_ws_79_1 stream=false payload_bytes=120 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8907133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=79 conn_id=oa_ws_79_1 idx=1 type=response.completed bytes=132 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8907133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=79 conn_id=oa_ws_79_1 response_id=resp_store_false_1 stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8907133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=79 request_id=resp_store_false_1 stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8907133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=79 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8907133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=79 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8907133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=79 account_type=apikey ws_host=127.0.0.1:62176 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8907133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=79 attempt=1 event=response.create payload_keys=input,model,store,stream,type payload_bytes=120 payload_key_sizes=input:34,type:15,model:7,store:1,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8907133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":79,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.8907133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=79 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=oa_ws_79_1 has_previous_response_id=false session_hash=22fb4eb406f4... has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=true store_disabled_conn_mode=strict retry_last_reason=- force_new_conn=false header_user_agent=- header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=session_store_false_a header_conversation_id=- session_id_source=header_session_id conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=true has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8907133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=79 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_79_1 conn_reused=true conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8907133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=79 conn_id=oa_ws_79_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8907133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=79 conn_id=oa_ws_79_1 stream=false payload_bytes=120 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8912338+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=79 conn_id=oa_ws_79_1 idx=1 type=response.completed bytes=132 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8912338+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.891Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=79 conn_id=oa_ws_79_1 response_id=resp_store_false_2 stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8912338+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.891Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=79 request_id=resp_store_false_2 stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8912338+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.891Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=79 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8912338+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.891Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=79 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8912338+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.891Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=79 account_type=apikey ws_host=127.0.0.1:62176 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8912338+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.891Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=79 attempt=1 event=response.create payload_keys=input,model,store,stream,type payload_bytes=120 payload_key_sizes=input:34,type:15,model:7,store:1,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8912338+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.891Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":79,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.8912338+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.891Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=79 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=837c00343a21... has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=true store_disabled_conn_mode=strict retry_last_reason=- force_new_conn=true header_user_agent=- header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=session_store_false_b header_conversation_id=- session_id_source=header_session_id conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=true has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8912338+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.891Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=79 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_79_2 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8912338+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.891Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=79 conn_id=oa_ws_79_2 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8912338+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.891Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=79 conn_id=oa_ws_79_2 stream=false payload_bytes=120 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8917519+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.891Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=79 conn_id=oa_ws_79_2 idx=1 type=response.completed bytes=132 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8917519+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.891Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=79 conn_id=oa_ws_79_2 response_id=resp_store_false_3 stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8917519+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.891Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=79 request_id=resp_store_false_3 stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8917519+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8917519+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8917519+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse"}
- {"Time":"2026-09-12T11:38:53.8917519+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8917519+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.891Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=80 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8917519+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.891Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=80 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8917519+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.891Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=80 account_type=apikey ws_host=127.0.0.1:62179 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8917519+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.891Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=80 attempt=1 event=response.create payload_keys=input,model,store,stream,type payload_bytes=120 payload_key_sizes=input:34,type:15,model:7,store:1,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8917519+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.891Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":80,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.8917519+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.891Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=80 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=bfa2432c8ad9... has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=true store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=- header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=session_store_false_reuse_a header_conversation_id=- session_id_source=header_session_id conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=true has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=80 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_80_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=80 conn_id=oa_ws_80_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=80 conn_id=oa_ws_80_1 stream=false payload_bytes=120 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=80 conn_id=oa_ws_80_1 idx=1 type=response.completed bytes=138 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=80 conn_id=oa_ws_80_1 response_id=resp_store_false_reuse_1 stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=80 request_id=resp_store_false_reuse_1 stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=80 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=80 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=80 account_type=apikey ws_host=127.0.0.1:62179 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=80 attempt=1 event=response.create payload_keys=input,model,store,stream,type payload_bytes=120 payload_key_sizes=input:34,type:15,model:7,store:1,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":80,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=80 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=a7354a66edea... has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=true store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=- header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=session_store_false_reuse_b header_conversation_id=- session_id_source=header_session_id conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=true has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=80 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_80_1 conn_reused=true conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=80 conn_id=oa_ws_80_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=80 conn_id=oa_ws_80_1 stream=false payload_bytes=120 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=80 conn_id=oa_ws_80_1 idx=1 type=response.completed bytes=138 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=80 conn_id=oa_ws_80_1 response_id=resp_store_false_reuse_2 stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=80 request_id=resp_store_false_reuse_2 stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Elapsed":0}
- {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ReadTimeoutAppliesPerRead"}
- {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ReadTimeoutAppliesPerRead","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2ReadTimeoutAppliesPerRead\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ReadTimeoutAppliesPerRead","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=81 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8928092+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ReadTimeoutAppliesPerRead","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=81 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8928092+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ReadTimeoutAppliesPerRead","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=81 account_type=apikey ws_host=api.openai.com ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8928092+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ReadTimeoutAppliesPerRead","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=81 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=106 payload_key_sizes=input:34,type:15,model:7,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8928092+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ReadTimeoutAppliesPerRead","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":81,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:53.8928092+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ReadTimeoutAppliesPerRead","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=81 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=codex_cli_rs/0.98.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8928092+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ReadTimeoutAppliesPerRead","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=81 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_81_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8928092+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ReadTimeoutAppliesPerRead","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=81 conn_id=oa_ws_81_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:53.8928092+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ReadTimeoutAppliesPerRead","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=81 conn_id=oa_ws_81_1 stream=false payload_bytes=106 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:54.5932902+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ReadTimeoutAppliesPerRead","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:54.593Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=81 conn_id=oa_ws_81_1 idx=1 type=response.created bytes=81 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ReadTimeoutAppliesPerRead","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.293Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=81 conn_id=oa_ws_81_1 idx=2 type=response.completed bytes=128 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ReadTimeoutAppliesPerRead","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.293Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=81 conn_id=oa_ws_81_1 response_id=resp_timeout_ok stream=false duration_ms=1401 events=2 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.created last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ReadTimeoutAppliesPerRead","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.293Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=81 request_id=resp_timeout_ok stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ReadTimeoutAppliesPerRead","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2ReadTimeoutAppliesPerRead (1.40s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ReadTimeoutAppliesPerRead","Elapsed":1.4}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded","Output":"=== RUN TestIsOpenAIWSTokenEvent_TerminalEventsExcluded\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/empty"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/empty","Output":"=== RUN TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/empty\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/empty","Output":"--- PASS: TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/empty (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/empty","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/whitespace_trimmed_empty"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/whitespace_trimmed_empty","Output":"=== RUN TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/whitespace_trimmed_empty\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/whitespace_trimmed_empty","Output":"--- PASS: TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/whitespace_trimmed_empty (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/whitespace_trimmed_empty","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.created"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.created","Output":"=== RUN TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.created\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.created","Output":"--- PASS: TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.created (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.created","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.in_progress"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.in_progress","Output":"=== RUN TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.in_progress\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.in_progress","Output":"--- PASS: TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.in_progress (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.in_progress","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.output_item.added"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.output_item.added","Output":"=== RUN TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.output_item.added\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.output_item.added","Output":"--- PASS: TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.output_item.added (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.output_item.added","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.output_item.done"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.output_item.done","Output":"=== RUN TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.output_item.done\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.output_item.done","Output":"--- PASS: TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.output_item.done (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.output_item.done","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.completed"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.completed","Output":"=== RUN TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.completed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.completed","Output":"--- PASS: TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.completed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.completed","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.done"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.done","Output":"=== RUN TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.done\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.done","Output":"--- PASS: TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.done (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.done","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.completed_padded"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.completed_padded","Output":"=== RUN TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.completed_padded\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.completed_padded","Output":"--- PASS: TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.completed_padded (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.completed_padded","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.done_padded"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.done_padded","Output":"=== RUN TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.done_padded\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.done_padded","Output":"--- PASS: TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.done_padded (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.done_padded","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/delta_text"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/delta_text","Output":"=== RUN TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/delta_text\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/delta_text","Output":"--- PASS: TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/delta_text (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/delta_text","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/delta_audio_transcript"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/delta_audio_transcript","Output":"=== RUN TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/delta_audio_transcript\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/delta_audio_transcript","Output":"--- PASS: TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/delta_audio_transcript (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/delta_audio_transcript","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/delta_function_call_arguments"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/delta_function_call_arguments","Output":"=== RUN TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/delta_function_call_arguments\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/delta_function_call_arguments","Output":"--- PASS: TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/delta_function_call_arguments (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/delta_function_call_arguments","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/output_text_done"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/output_text_done","Output":"=== RUN TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/output_text_done\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/output_text_done","Output":"--- PASS: TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/output_text_done (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/output_text_done","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/output_text_annotation_added"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/output_text_annotation_added","Output":"=== RUN TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/output_text_annotation_added\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/output_text_annotation_added","Output":"--- PASS: TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/output_text_annotation_added (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/output_text_annotation_added","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/output_audio_done"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/output_audio_done","Output":"=== RUN TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/output_audio_done\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/output_audio_done","Output":"--- PASS: TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/output_audio_done (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/output_audio_done","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/reasoning_summary_delta"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/reasoning_summary_delta","Output":"=== RUN TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/reasoning_summary_delta\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/reasoning_summary_delta","Output":"--- PASS: TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/reasoning_summary_delta (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/reasoning_summary_delta","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/unrelated_event_error"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/unrelated_event_error","Output":"=== RUN TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/unrelated_event_error\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/unrelated_event_error","Output":"--- PASS: TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/unrelated_event_error (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/unrelated_event_error","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/unknown_event_without_match"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/unknown_event_without_match","Output":"=== RUN TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/unknown_event_without_match\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/unknown_event_without_match","Output":"--- PASS: TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/unknown_event_without_match (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/unknown_event_without_match","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded","Output":"--- PASS: TestIsOpenAIWSTokenEvent_TerminalEventsExcluded (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSCyberPolicyMark_ResponseFailed"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSCyberPolicyMark_ResponseFailed","Output":"=== RUN TestOpenAIWSCyberPolicyMark_ResponseFailed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSCyberPolicyMark_ResponseFailed","Output":"--- PASS: TestOpenAIWSCyberPolicyMark_ResponseFailed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSCyberPolicyMark_ResponseFailed","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSCyberPolicyMark_NonCyberPayload"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSCyberPolicyMark_NonCyberPayload","Output":"=== RUN TestOpenAIWSCyberPolicyMark_NonCyberPayload\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSCyberPolicyMark_NonCyberPayload","Output":"--- PASS: TestOpenAIWSCyberPolicyMark_NonCyberPayload (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSCyberPolicyMark_NonCyberPayload","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents","Output":"=== RUN TestOpenAIForwardResultSucceededForScheduling_TerminalEvents\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/nil_legacy_result"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/nil_legacy_result","Output":"=== RUN TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/nil_legacy_result\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/nil_legacy_result","Output":"--- PASS: TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/nil_legacy_result (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/nil_legacy_result","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/non_websocket_zero_value"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/non_websocket_zero_value","Output":"=== RUN TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/non_websocket_zero_value\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/non_websocket_zero_value","Output":"--- PASS: TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/non_websocket_zero_value (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/non_websocket_zero_value","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/websocket_legacy_empty_terminal"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/websocket_legacy_empty_terminal","Output":"=== RUN TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/websocket_legacy_empty_terminal\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/websocket_legacy_empty_terminal","Output":"--- PASS: TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/websocket_legacy_empty_terminal (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/websocket_legacy_empty_terminal","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/completed"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/completed","Output":"=== RUN TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/completed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/completed","Output":"--- PASS: TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/completed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/completed","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/done"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/done","Output":"=== RUN TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/done\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/done","Output":"--- PASS: TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/done (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/done","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/failed"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/failed","Output":"=== RUN TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/failed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/failed","Output":"--- PASS: TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/failed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/failed","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/incomplete"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/incomplete","Output":"=== RUN TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/incomplete\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/incomplete","Output":"--- PASS: TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/incomplete (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/incomplete","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/cancelled"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/cancelled","Output":"=== RUN TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/cancelled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/cancelled","Output":"--- PASS: TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/cancelled (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/cancelled","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents","Output":"--- PASS: TestOpenAIForwardResultSucceededForScheduling_TerminalEvents (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSTerminalEvent_ResponseFailedRecordsModelTransient"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSTerminalEvent_ResponseFailedRecordsModelTransient","Output":"=== RUN TestOpenAIWSTerminalEvent_ResponseFailedRecordsModelTransient\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSTerminalEvent_ResponseFailedRecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:55.293Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":5201,\"status_code\":500}\n"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSTerminalEvent_ResponseFailedRecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:55.293Z\",\"logger\":\"slog\",\"msg\":\"openai_model_transient_state\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":5201,\"model\":\"gpt-5.5\",\"failure_streak\":1,\"cooldown_ms\":0,\"block_scope\":\"account_model\"}\n"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSTerminalEvent_ResponseFailedRecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:55.293Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":5201,\"status_code\":500}\n"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSTerminalEvent_ResponseFailedRecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:55.293Z\",\"logger\":\"slog\",\"msg\":\"openai_model_transient_state\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":5201,\"model\":\"gpt-5.5\",\"failure_streak\":2,\"cooldown_ms\":10000,\"block_scope\":\"account_model\"}\n"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSTerminalEvent_ResponseFailedRecordsModelTransient","Output":"--- PASS: TestOpenAIWSTerminalEvent_ResponseFailedRecordsModelTransient (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSTerminalEvent_ResponseFailedRecordsModelTransient","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorEvent_ServerErrorRecordsModelTransient"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorEvent_ServerErrorRecordsModelTransient","Output":"=== RUN TestOpenAIWSErrorEvent_ServerErrorRecordsModelTransient\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorEvent_ServerErrorRecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:55.293Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":5203,\"status_code\":500}\n"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorEvent_ServerErrorRecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:55.293Z\",\"logger\":\"slog\",\"msg\":\"openai_model_transient_state\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":5203,\"model\":\"gpt-5.5\",\"failure_streak\":1,\"cooldown_ms\":0,\"block_scope\":\"account_model\"}\n"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorEvent_ServerErrorRecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:55.293Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":5203,\"status_code\":500}\n"}
- {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorEvent_ServerErrorRecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:55.293Z\",\"logger\":\"slog\",\"msg\":\"openai_model_transient_state\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":5203,\"model\":\"gpt-5.5\",\"failure_streak\":2,\"cooldown_ms\":10000,\"block_scope\":\"account_model\"}\n"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorEvent_ServerErrorRecordsModelTransient","Output":"--- PASS: TestOpenAIWSErrorEvent_ServerErrorRecordsModelTransient (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorEvent_ServerErrorRecordsModelTransient","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPayloadTransientStatus_Explicit529IsNotModelTransient"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPayloadTransientStatus_Explicit529IsNotModelTransient","Output":"=== RUN TestOpenAIWSPayloadTransientStatus_Explicit529IsNotModelTransient\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPayloadTransientStatus_Explicit529IsNotModelTransient","Output":"--- PASS: TestOpenAIWSPayloadTransientStatus_Explicit529IsNotModelTransient (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPayloadTransientStatus_Explicit529IsNotModelTransient","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDial5xxRecordsModelTransient"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDial5xxRecordsModelTransient","Output":"=== RUN TestOpenAIWSDial5xxRecordsModelTransient\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDial5xxRecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:55.293Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":5202,\"status_code\":502}\n"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDial5xxRecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:55.293Z\",\"logger\":\"slog\",\"msg\":\"openai_model_transient_state\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":5202,\"model\":\"gpt-5.5\",\"failure_streak\":1,\"cooldown_ms\":0,\"block_scope\":\"account_model\"}\n"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDial5xxRecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:55.293Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":5202,\"status_code\":502}\n"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDial5xxRecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:55.294Z\",\"logger\":\"slog\",\"msg\":\"openai_model_transient_state\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":5202,\"model\":\"gpt-5.5\",\"failure_streak\":2,\"cooldown_ms\":10000,\"block_scope\":\"account_model\"}\n"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDial5xxRecordsModelTransient","Output":"--- PASS: TestOpenAIWSDial5xxRecordsModelTransient (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDial5xxRecordsModelTransient","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal","Output":"=== RUN TestIsOpenAIWSTokenEvent_DisjointWithTerminal\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.completed"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.completed","Output":"=== RUN TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.completed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.completed","Output":"--- PASS: TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.completed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.completed","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.done"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.done","Output":"=== RUN TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.done\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.done","Output":"--- PASS: TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.done (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.done","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.failed"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.failed","Output":"=== RUN TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.failed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.failed","Output":"--- PASS: TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.failed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.failed","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.incomplete"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.incomplete","Output":"=== RUN TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.incomplete\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.incomplete","Output":"--- PASS: TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.incomplete (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.incomplete","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.cancelled"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.cancelled","Output":"=== RUN TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.cancelled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.cancelled","Output":"--- PASS: TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.cancelled (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.cancelled","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.canceled"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.canceled","Output":"=== RUN TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.canceled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.canceled","Output":"--- PASS: TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.canceled (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.canceled","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal","Output":"--- PASS: TestIsOpenAIWSTokenEvent_DisjointWithTerminal (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate","Output":"=== RUN TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/priority_nonstream"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/priority_nonstream","Output":"=== RUN TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/priority_nonstream\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/priority_nonstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=5882 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.5 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/priority_nonstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=5882 account_type=apikey model=gpt-5.5 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/priority_nonstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=5882 account_type=apikey ws_host=api.openai.com ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/priority_nonstream","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=5882 attempt=1 event=response.create payload_keys=input,model,service_tier,stream,type payload_bytes=129 payload_key_sizes=input:31,type:15,service_tier:8,model:7,stream:1 input_summary=items=1,text_chars=2,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/priority_nonstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":5882,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"priority\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/priority_nonstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=5882 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=unit-test-agent/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/priority_nonstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=5882 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_5882_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/priority_nonstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=5882 conn_id=oa_ws_5882_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/priority_nonstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=5882 conn_id=oa_ws_5882_1 stream=false payload_bytes=129 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/priority_nonstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=5882 conn_id=oa_ws_5882_1 idx=1 type=response.completed bytes=171 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/priority_nonstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=5882 conn_id=oa_ws_5882_1 response_id=resp_tier_v2 stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/priority_nonstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=5882 request_id=resp_tier_v2 stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/priority_nonstream","Output":"--- PASS: TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/priority_nonstream (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/priority_nonstream","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/fast_stream"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/fast_stream","Output":"=== RUN TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/fast_stream\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/fast_stream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=5882 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.5 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/fast_stream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=5882 account_type=apikey model=gpt-5.5 stream=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/fast_stream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=5882 account_type=apikey ws_host=api.openai.com ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/fast_stream","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=5882 attempt=1 event=response.create payload_keys=input,model,service_tier,stream,type payload_bytes=128 payload_key_sizes=input:31,type:15,service_tier:8,model:7,stream:1 input_summary=items=1,text_chars=2,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=true payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/fast_stream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":5882,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"priority\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/fast_stream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=5882 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=unit-test-agent/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/fast_stream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=5882 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_5882_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/fast_stream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=5882 conn_id=oa_ws_5882_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/fast_stream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=5882 conn_id=oa_ws_5882_1 stream=true payload_bytes=128 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/fast_stream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=5882 conn_id=oa_ws_5882_1 idx=1 type=response.completed bytes=171 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/fast_stream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=5882 conn_id=oa_ws_5882_1 response_id=resp_tier_v2 stream=true duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=true client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/fast_stream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=5882 request_id=resp_tier_v2 stream=true has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/fast_stream","Output":"--- PASS: TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/fast_stream (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/fast_stream","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate","Output":"--- PASS: TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes"}
- {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes","Output":"=== RUN TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/error_before_return"}
- {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/error_before_return","Output":"=== RUN TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/error_before_return\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/error_before_return","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=5883 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.5 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/error_before_return","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=5883 account_type=apikey model=gpt-5.5 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/error_before_return","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=5883 account_type=apikey ws_host=api.openai.com ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/error_before_return","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=5883 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=75 payload_key_sizes=type:15,model:7,input:5,stream:1 input_summary=- stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/error_before_return","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":5883,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/error_before_return","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=5883 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=- header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/error_before_return","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=5883 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_5883_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/error_before_return","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=5883 conn_id=oa_ws_5883_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/error_before_return","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=5883 conn_id=oa_ws_5883_1 stream=false payload_bytes=75 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/error_before_return","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=5883 conn_id=oa_ws_5883_1 idx=1 type=err bytes=167 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/error_before_return","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] error_event account_id=5883 conn_id=oa_ws_5883_1 idx=1 fallback_reason=upstream_rate_limited can_fallback=false err_code=cyber_policy err_type=rate_limit_err err_message=rate limit exceeded by cyber policy\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:680\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestForwardOpenAIWSV2_Mar"}
- {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/error_before_return","Output":"ksCyberPolicyForFailureEventShapes.func1\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2_test.go:152\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"}
- {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/error_before_return","Output":"--- PASS: TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/error_before_return (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/error_before_return","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/response_failed_terminal"}
- {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/response_failed_terminal","Output":"=== RUN TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/response_failed_terminal\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/response_failed_terminal","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=5883 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.5 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/response_failed_terminal","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=5883 account_type=apikey model=gpt-5.5 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/response_failed_terminal","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=5883 account_type=apikey ws_host=api.openai.com ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/response_failed_terminal","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=5883 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=75 payload_key_sizes=type:15,model:7,input:5,stream:1 input_summary=- stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/response_failed_terminal","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":5883,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/response_failed_terminal","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=5883 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=- header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/response_failed_terminal","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=5883 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_5883_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/response_failed_terminal","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=5883 conn_id=oa_ws_5883_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/response_failed_terminal","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=5883 conn_id=oa_ws_5883_1 stream=false payload_bytes=75 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/response_failed_terminal","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=5883 conn_id=oa_ws_5883_1 idx=1 type=response.fail bytes=188 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2953686+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/response_failed_terminal","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=5883 conn_id=oa_ws_5883_1 response_id=resp_cyber stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.fail last_event=response.fail first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2953686+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/response_failed_terminal","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=5883 request_id=resp_cyber stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2953686+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/response_failed_terminal","Output":"--- PASS: TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/response_failed_terminal (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2953686+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/response_failed_terminal","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.2953686+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes","Output":"--- PASS: TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2953686+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.2953686+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash"}
- {"Time":"2026-09-12T11:38:55.2953686+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash","Output":"=== RUN TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2958887+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.295Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_start account_id=1 account_type=oauth payload_bytes=140 threshold_bytes=15728640 has_session_hash=true store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2958887+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.295Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.2958887+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.295Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_start account_id=1 account_type=oauth payload_bytes=137 threshold_bytes=15728640 has_session_hash=true store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2958887+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.295Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.2964123+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.296Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=1 turn=1 response_id=resp_beta_1 payload_bytes=137 duration_ms=0 events=3 token_events=0 terminal_events=1 first_event=response.created last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2964123+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.296Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=1 turn=1 response_id=resp_alpha_1 payload_bytes=140 duration_ms=0 events=3 token_events=0 terminal_events=1 first_event=response.created last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2964123+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.296Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_replay_input account_id=1 turn=2 input_items=3 previous_response_id_present=true has_tool_output=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2964123+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.296Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.2964123+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.296Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=1 turn=2 response_id=resp_alpha_2 payload_bytes=297 duration_ms=0 events=2 token_events=0 terminal_events=1 first_event=response.created last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2964123+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.296Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_client_closed account_id=1 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2964123+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.296Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_replay_input account_id=1 turn=2 input_items=3 previous_response_id_present=true has_tool_output=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2964123+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.296Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.2964123+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.296Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=1 turn=2 response_id=resp_beta_2 payload_bytes=291 duration_ms=0 events=2 token_events=0 terminal_events=1 first_event=response.created last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2964123+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.296Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_client_closed account_id=1 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash","Output":"--- PASS: TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSCurrentTurnRetryPayloadRejectsOrphanToolOutput"}
- {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSCurrentTurnRetryPayloadRejectsOrphanToolOutput","Output":"=== RUN TestBuildOpenAIWSCurrentTurnRetryPayloadRejectsOrphanToolOutput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSCurrentTurnRetryPayloadRejectsOrphanToolOutput","Output":"--- PASS: TestBuildOpenAIWSCurrentTurnRetryPayloadRejectsOrphanToolOutput (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSCurrentTurnRetryPayloadRejectsOrphanToolOutput","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnLaterTurn429FailsOverBeforeClientWrite"}
- {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnLaterTurn429FailsOverBeforeClientWrite","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnLaterTurn429FailsOverBeforeClientWrite\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnLaterTurn429FailsOverBeforeClientWrite","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.296Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":129,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnLaterTurn429FailsOverBeforeClientWrite","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnLaterTurn429FailsOverBeforeClientWrite (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnLaterTurn429FailsOverBeforeClientWrite","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnLaterTurnDoesNotFailOverAfterDownstreamOutput"}
- {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnLaterTurnDoesNotFailOverAfterDownstreamOutput","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnLaterTurnDoesNotFailOverAfterDownstreamOutput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnLaterTurnDoesNotFailOverAfterDownstreamOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.296Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":10,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnLaterTurnDoesNotFailOverAfterDownstreamOutput","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnLaterTurnDoesNotFailOverAfterDownstreamOutput (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnLaterTurnDoesNotFailOverAfterDownstreamOutput","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeLaterTurn429RetriesCurrentTurnOnReplacementAccount"}
- {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeLaterTurn429RetriesCurrentTurnOnReplacementAccount","Output":"=== RUN TestOpenAIWSHTTPBridgeLaterTurn429RetriesCurrentTurnOnReplacementAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.297436+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeLaterTurn429RetriesCurrentTurnOnReplacementAccount","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.297Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_start account_id=129 account_type=oauth payload_bytes=92 threshold_bytes=15728640 has_session_hash=true store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.297436+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeLaterTurn429RetriesCurrentTurnOnReplacementAccount","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.297Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":129,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.297436+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeLaterTurn429RetriesCurrentTurnOnReplacementAccount","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.297Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=129 turn=1 response_id=resp_first payload_bytes=92 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.297436+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeLaterTurn429RetriesCurrentTurnOnReplacementAccount","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.297Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_replay_input account_id=129 turn=2 input_items=3 previous_response_id_present=true has_tool_output=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.297436+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeLaterTurn429RetriesCurrentTurnOnReplacementAccount","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.297Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":129,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.297436+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeLaterTurn429RetriesCurrentTurnOnReplacementAccount","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.297Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_start account_id=130 account_type=oauth payload_bytes=536 threshold_bytes=15728640 has_session_hash=true store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.297436+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeLaterTurn429RetriesCurrentTurnOnReplacementAccount","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.297Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":130,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.297436+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeLaterTurn429RetriesCurrentTurnOnReplacementAccount","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.297Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=130 turn=1 response_id=resp_second payload_bytes=536 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeLaterTurn429RetriesCurrentTurnOnReplacementAccount","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.297Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_client_closed account_id=130 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeLaterTurn429RetriesCurrentTurnOnReplacementAccount","Output":"--- PASS: TestOpenAIWSHTTPBridgeLaterTurn429RetriesCurrentTurnOnReplacementAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeLaterTurn429RetriesCurrentTurnOnReplacementAccount","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSClientFirstMessageTimeout"}
- {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSClientFirstMessageTimeout","Output":"=== RUN TestResolveOpenAIWSClientFirstMessageTimeout\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSClientFirstMessageTimeout","Output":"--- PASS: TestResolveOpenAIWSClientFirstMessageTimeout (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSClientFirstMessageTimeout","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAIWSHTTPBridgeBodyStripsWSFields"}
- {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAIWSHTTPBridgeBodyStripsWSFields","Output":"=== RUN TestPrepareOpenAIWSHTTPBridgeBodyStripsWSFields\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAIWSHTTPBridgeBodyStripsWSFields","Output":"--- PASS: TestPrepareOpenAIWSHTTPBridgeBodyStripsWSFields (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAIWSHTTPBridgeBodyStripsWSFields","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAIWSHTTPBridgeBodyStripsNoneReasoningForCompatibleEndpoint"}
- {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAIWSHTTPBridgeBodyStripsNoneReasoningForCompatibleEndpoint","Output":"=== RUN TestPrepareOpenAIWSHTTPBridgeBodyStripsNoneReasoningForCompatibleEndpoint\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAIWSHTTPBridgeBodyStripsNoneReasoningForCompatibleEndpoint","Output":"--- PASS: TestPrepareOpenAIWSHTTPBridgeBodyStripsNoneReasoningForCompatibleEndpoint (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAIWSHTTPBridgeBodyStripsNoneReasoningForCompatibleEndpoint","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurn_KeepsOutboundAndObservedServiceTiersSeparate"}
- {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurn_KeepsOutboundAndObservedServiceTiersSeparate","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurn_KeepsOutboundAndObservedServiceTiersSeparate\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurn_KeepsOutboundAndObservedServiceTiersSeparate","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.297Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":5881,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"priority\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurn_KeepsOutboundAndObservedServiceTiersSeparate","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.297Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=5881 turn=1 response_id=resp_tier payload_bytes=97 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurn_KeepsOutboundAndObservedServiceTiersSeparate","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurn_KeepsOutboundAndObservedServiceTiersSeparate (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurn_KeepsOutboundAndObservedServiceTiersSeparate","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurn_NormalizesFastWithoutLosingObservedDefault"}
- {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurn_NormalizesFastWithoutLosingObservedDefault","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurn_NormalizesFastWithoutLosingObservedDefault\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurn_NormalizesFastWithoutLosingObservedDefault","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.297Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":5882,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"priority\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurn_NormalizesFastWithoutLosingObservedDefault","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.297Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=5882 turn=1 response_id=resp_tier2 payload_bytes=93 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurn_NormalizesFastWithoutLosingObservedDefault","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurn_NormalizesFastWithoutLosingObservedDefault (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurn_NormalizesFastWithoutLosingObservedDefault","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnAPIKeyAdaptsClientTools"}
- {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnAPIKeyAdaptsClientTools","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnAPIKeyAdaptsClientTools\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnAPIKeyAdaptsClientTools","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.297Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":5659,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.298466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnAPIKeyAdaptsClientTools","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.298Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=5659 turn=2 response_id=resp_tools payload_bytes=348 duration_ms=0 events=5 token_events=1 terminal_events=1 first_event=response.output_item.added last_event=response.completed first_token_ms=0 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.298466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnAPIKeyAdaptsClientTools","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnAPIKeyAdaptsClientTools (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.298466+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnAPIKeyAdaptsClientTools","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.298466+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnAPIKeyRestoresClientToolsInResponseDone"}
- {"Time":"2026-09-12T11:38:55.298466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnAPIKeyRestoresClientToolsInResponseDone","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnAPIKeyRestoresClientToolsInResponseDone\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.298466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnAPIKeyRestoresClientToolsInResponseDone","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.298Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":5764,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.298466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnAPIKeyRestoresClientToolsInResponseDone","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.298Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=5764 turn=1 response_id=resp_tools payload_bytes=157 duration_ms=0 events=4 token_events=1 terminal_events=1 first_event=response.output_item.added last_event=response.done first_token_ms=0 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.298466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnAPIKeyRestoresClientToolsInResponseDone","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnAPIKeyRestoresClientToolsInResponseDone (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.298466+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnAPIKeyRestoresClientToolsInResponseDone","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.298466+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnGrokPromotesDiscoveryAndRestoresNamespaceSSE"}
- {"Time":"2026-09-12T11:38:55.298466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnGrokPromotesDiscoveryAndRestoresNamespaceSSE","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnGrokPromotesDiscoveryAndRestoresNamespaceSSE\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2989782+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnGrokPromotesDiscoveryAndRestoresNamespaceSSE","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.298Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=5765 turn=1 response_id=resp_spawn payload_bytes=472 duration_ms=0 events=4 token_events=0 terminal_events=1 first_event=response.output_item.added last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2989782+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnGrokPromotesDiscoveryAndRestoresNamespaceSSE","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnGrokPromotesDiscoveryAndRestoresNamespaceSSE (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2989782+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnGrokPromotesDiscoveryAndRestoresNamespaceSSE","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.2989782+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnGrokInheritsToolSearchAndPromotesFollowupDiscovery"}
- {"Time":"2026-09-12T11:38:55.2989782+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnGrokInheritsToolSearchAndPromotesFollowupDiscovery","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnGrokInheritsToolSearchAndPromotesFollowupDiscovery\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2989782+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnGrokInheritsToolSearchAndPromotesFollowupDiscovery","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.298Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=5766 turn=1 response_id=resp_first payload_bytes=117 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2994881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnGrokInheritsToolSearchAndPromotesFollowupDiscovery","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.298Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=5766 turn=2 response_id=resp_second payload_bytes=296 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2994881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnGrokInheritsToolSearchAndPromotesFollowupDiscovery","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnGrokInheritsToolSearchAndPromotesFollowupDiscovery (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2994881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnGrokInheritsToolSearchAndPromotesFollowupDiscovery","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.2994881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAPIKeyReusesClientToolMappingWhenFollowupOmitsTools"}
- {"Time":"2026-09-12T11:38:55.2994881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAPIKeyReusesClientToolMappingWhenFollowupOmitsTools","Output":"=== RUN TestOpenAIWSHTTPBridgeAPIKeyReusesClientToolMappingWhenFollowupOmitsTools\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2994881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAPIKeyReusesClientToolMappingWhenFollowupOmitsTools","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.299Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_start account_id=9001 account_type=apikey payload_bytes=122 threshold_bytes=1 has_session_hash=true store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2994881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAPIKeyReusesClientToolMappingWhenFollowupOmitsTools","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.299Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":9001,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.2999967+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAPIKeyReusesClientToolMappingWhenFollowupOmitsTools","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.299Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=9001 turn=1 response_id=resp_custom_first payload_bytes=122 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2999967+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAPIKeyReusesClientToolMappingWhenFollowupOmitsTools","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.299Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_replay_input account_id=9001 turn=2 input_items=3 previous_response_id_present=true has_tool_output=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2999967+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAPIKeyReusesClientToolMappingWhenFollowupOmitsTools","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.299Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":9001,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.2999967+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAPIKeyReusesClientToolMappingWhenFollowupOmitsTools","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.299Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=9001 turn=2 response_id=resp_custom_second payload_bytes=302 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2999967+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAPIKeyReusesClientToolMappingWhenFollowupOmitsTools","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.299Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_client_closed account_id=9001 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.2999967+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAPIKeyReusesClientToolMappingWhenFollowupOmitsTools","Output":"--- PASS: TestOpenAIWSHTTPBridgeAPIKeyReusesClientToolMappingWhenFollowupOmitsTools (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.2999967+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAPIKeyReusesClientToolMappingWhenFollowupOmitsTools","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.2999967+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeFullCustomToolHistoryWithoutPreviousResponseIDDoesNotReplay"}
- {"Time":"2026-09-12T11:38:55.2999967+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeFullCustomToolHistoryWithoutPreviousResponseIDDoesNotReplay","Output":"=== RUN TestOpenAIWSHTTPBridgeFullCustomToolHistoryWithoutPreviousResponseIDDoesNotReplay\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3005064+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeFullCustomToolHistoryWithoutPreviousResponseIDDoesNotReplay","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.300Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_start account_id=9002 account_type=oauth payload_bytes=62 threshold_bytes=1 has_session_hash=true store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.3005064+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeFullCustomToolHistoryWithoutPreviousResponseIDDoesNotReplay","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.300Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":9002,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.3005064+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeFullCustomToolHistoryWithoutPreviousResponseIDDoesNotReplay","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.300Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=9002 turn=1 response_id=resp_1 payload_bytes=62 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.3005064+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeFullCustomToolHistoryWithoutPreviousResponseIDDoesNotReplay","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.300Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_replay_input account_id=9002 turn=2 input_items=2 previous_response_id_present=true has_tool_output=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.3005064+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeFullCustomToolHistoryWithoutPreviousResponseIDDoesNotReplay","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.300Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":9002,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.3005064+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeFullCustomToolHistoryWithoutPreviousResponseIDDoesNotReplay","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.300Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=9002 turn=2 response_id=resp_2 payload_bytes=153 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.3005064+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeFullCustomToolHistoryWithoutPreviousResponseIDDoesNotReplay","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.300Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":9002,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.3010162+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeFullCustomToolHistoryWithoutPreviousResponseIDDoesNotReplay","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.301Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=9002 turn=3 response_id=resp_3 payload_bytes=236 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.3010162+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeFullCustomToolHistoryWithoutPreviousResponseIDDoesNotReplay","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.301Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":9002,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.3010162+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeFullCustomToolHistoryWithoutPreviousResponseIDDoesNotReplay","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.301Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=9002 turn=4 response_id=resp_4 payload_bytes=236 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.3010162+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeFullCustomToolHistoryWithoutPreviousResponseIDDoesNotReplay","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.301Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_client_closed account_id=9002 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.3010162+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeFullCustomToolHistoryWithoutPreviousResponseIDDoesNotReplay","Output":"--- PASS: TestOpenAIWSHTTPBridgeFullCustomToolHistoryWithoutPreviousResponseIDDoesNotReplay (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3010162+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeFullCustomToolHistoryWithoutPreviousResponseIDDoesNotReplay","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3010162+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeObjectToolOutputWithoutPreviousResponseIDReplaysMatchingCall"}
- {"Time":"2026-09-12T11:38:55.3010162+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeObjectToolOutputWithoutPreviousResponseIDReplaysMatchingCall","Output":"=== RUN TestOpenAIWSHTTPBridgeObjectToolOutputWithoutPreviousResponseIDReplaysMatchingCall\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3015271+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeObjectToolOutputWithoutPreviousResponseIDReplaysMatchingCall","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.301Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_start account_id=9003 account_type=oauth payload_bytes=62 threshold_bytes=1 has_session_hash=true store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.3015271+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeObjectToolOutputWithoutPreviousResponseIDReplaysMatchingCall","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.301Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":9003,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.3015271+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeObjectToolOutputWithoutPreviousResponseIDReplaysMatchingCall","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.301Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=9003 turn=1 response_id=resp_1 payload_bytes=62 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.3015271+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeObjectToolOutputWithoutPreviousResponseIDReplaysMatchingCall","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.301Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_replay_input account_id=9003 turn=2 input_items=3 previous_response_id_present=false has_tool_output=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.3015271+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeObjectToolOutputWithoutPreviousResponseIDReplaysMatchingCall","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.301Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":9003,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.3015271+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeObjectToolOutputWithoutPreviousResponseIDReplaysMatchingCall","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.301Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=9003 turn=2 response_id=resp_2 payload_bytes=223 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.3015271+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeObjectToolOutputWithoutPreviousResponseIDReplaysMatchingCall","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.301Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_client_closed account_id=9003 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeObjectToolOutputWithoutPreviousResponseIDReplaysMatchingCall","Output":"--- PASS: TestOpenAIWSHTTPBridgeObjectToolOutputWithoutPreviousResponseIDReplaysMatchingCall (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeObjectToolOutputWithoutPreviousResponseIDReplaysMatchingCall","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeDecisionKeepsSmallFramesOnWS"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeDecisionKeepsSmallFramesOnWS","Output":"=== RUN TestOpenAIWSHTTPBridgeDecisionKeepsSmallFramesOnWS\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeDecisionKeepsSmallFramesOnWS","Output":"--- PASS: TestOpenAIWSHTTPBridgeDecisionKeepsSmallFramesOnWS (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeDecisionKeepsSmallFramesOnWS","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision","Output":"=== RUN TestOpenAIWSPassthroughFirstMessageBridgeDecision\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_without_previous_response_id_bridges"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_without_previous_response_id_bridges","Output":"=== RUN TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_without_previous_response_id_bridges\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_without_previous_response_id_bridges","Output":"--- PASS: TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_without_previous_response_id_bridges (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_without_previous_response_id_bridges","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/omitted_type_bridges_as_response_create"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/omitted_type_bridges_as_response_create","Output":"=== RUN TestOpenAIWSPassthroughFirstMessageBridgeDecision/omitted_type_bridges_as_response_create\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/omitted_type_bridges_as_response_create","Output":"--- PASS: TestOpenAIWSPassthroughFirstMessageBridgeDecision/omitted_type_bridges_as_response_create (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/omitted_type_bridges_as_response_create","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/blank_type_bridges_as_response_create"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/blank_type_bridges_as_response_create","Output":"=== RUN TestOpenAIWSPassthroughFirstMessageBridgeDecision/blank_type_bridges_as_response_create\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/blank_type_bridges_as_response_create","Output":"--- PASS: TestOpenAIWSPassthroughFirstMessageBridgeDecision/blank_type_bridges_as_response_create (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/blank_type_bridges_as_response_create","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/exact_threshold_bridges"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/exact_threshold_bridges","Output":"=== RUN TestOpenAIWSPassthroughFirstMessageBridgeDecision/exact_threshold_bridges\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/exact_threshold_bridges","Output":"--- PASS: TestOpenAIWSPassthroughFirstMessageBridgeDecision/exact_threshold_bridges (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/exact_threshold_bridges","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/small_stays_passthrough"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/small_stays_passthrough","Output":"=== RUN TestOpenAIWSPassthroughFirstMessageBridgeDecision/small_stays_passthrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/small_stays_passthrough","Output":"--- PASS: TestOpenAIWSPassthroughFirstMessageBridgeDecision/small_stays_passthrough (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/small_stays_passthrough","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/previous_response_id_stays_passthrough"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/previous_response_id_stays_passthrough","Output":"=== RUN TestOpenAIWSPassthroughFirstMessageBridgeDecision/previous_response_id_stays_passthrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/previous_response_id_stays_passthrough","Output":"--- PASS: TestOpenAIWSPassthroughFirstMessageBridgeDecision/previous_response_id_stays_passthrough (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/previous_response_id_stays_passthrough","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/duplicate_type_stays_passthrough"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/duplicate_type_stays_passthrough","Output":"=== RUN TestOpenAIWSPassthroughFirstMessageBridgeDecision/duplicate_type_stays_passthrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/duplicate_type_stays_passthrough","Output":"--- PASS: TestOpenAIWSPassthroughFirstMessageBridgeDecision/duplicate_type_stays_passthrough (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/duplicate_type_stays_passthrough","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/duplicate_previous_response_id_stays_passthrough"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/duplicate_previous_response_id_stays_passthrough","Output":"=== RUN TestOpenAIWSPassthroughFirstMessageBridgeDecision/duplicate_previous_response_id_stays_passthrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/duplicate_previous_response_id_stays_passthrough","Output":"--- PASS: TestOpenAIWSPassthroughFirstMessageBridgeDecision/duplicate_previous_response_id_stays_passthrough (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/duplicate_previous_response_id_stays_passthrough","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/null_type_bridges_as_response_create"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/null_type_bridges_as_response_create","Output":"=== RUN TestOpenAIWSPassthroughFirstMessageBridgeDecision/null_type_bridges_as_response_create\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/null_type_bridges_as_response_create","Output":"--- PASS: TestOpenAIWSPassthroughFirstMessageBridgeDecision/null_type_bridges_as_response_create (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/null_type_bridges_as_response_create","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/non-string_type_stays_passthrough"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/non-string_type_stays_passthrough","Output":"=== RUN TestOpenAIWSPassthroughFirstMessageBridgeDecision/non-string_type_stays_passthrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/non-string_type_stays_passthrough","Output":"--- PASS: TestOpenAIWSPassthroughFirstMessageBridgeDecision/non-string_type_stays_passthrough (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/non-string_type_stays_passthrough","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_response_cancel_stays_passthrough"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_response_cancel_stays_passthrough","Output":"=== RUN TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_response_cancel_stays_passthrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_response_cancel_stays_passthrough","Output":"--- PASS: TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_response_cancel_stays_passthrough (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_response_cancel_stays_passthrough","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_other_event_stays_passthrough"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_other_event_stays_passthrough","Output":"=== RUN TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_other_event_stays_passthrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_other_event_stays_passthrough","Output":"--- PASS: TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_other_event_stays_passthrough (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_other_event_stays_passthrough","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_malformed_JSON_stays_passthrough"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_malformed_JSON_stays_passthrough","Output":"=== RUN TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_malformed_JSON_stays_passthrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_malformed_JSON_stays_passthrough","Output":"--- PASS: TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_malformed_JSON_stays_passthrough (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_malformed_JSON_stays_passthrough","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision","Output":"--- PASS: TestOpenAIWSPassthroughFirstMessageBridgeDecision (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety/first_turn_fails_over_before_downstream_event"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety/first_turn_fails_over_before_downstream_event","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety/first_turn_fails_over_before_downstream_event\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety/first_turn_fails_over_before_downstream_event","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.302Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":8,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety/first_turn_fails_over_before_downstream_event","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety/first_turn_fails_over_before_downstream_event (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety/first_turn_fails_over_before_downstream_event","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety/later_turn_does_not_replay_completed_turns"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety/later_turn_does_not_replay_completed_turns","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety/later_turn_does_not_replay_completed_turns\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety/later_turn_does_not_replay_completed_turns","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.302Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":8,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety/later_turn_does_not_replay_completed_turns","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety/later_turn_does_not_replay_completed_turns (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety/later_turn_does_not_replay_completed_turns","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_401"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_401","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_401\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_401","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.302Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":9,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_401","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_401 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_401","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_429"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_429","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_429\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_429","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.302Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":9,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_429","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_429 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_429","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_500"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_500","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_500\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_500","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.302Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":9,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_500","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_500 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_500","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/later_turn_500_does_not_replay"}
- {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/later_turn_500_does_not_replay","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/later_turn_500_does_not_replay\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/later_turn_500_does_not_replay","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.302Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":9,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/later_turn_500_does_not_replay","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/later_turn_500_does_not_replay (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/later_turn_500_does_not_replay","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRetriesRejectedFieldBeforeClientOutput"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRetriesRejectedFieldBeforeClientOutput","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnRetriesRejectedFieldBeforeClientOutput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRetriesRejectedFieldBeforeClientOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.302Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":91,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRetriesRejectedFieldBeforeClientOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.302Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_rejected_field_retry account_id=91 turn=1 reason=truncation parameter rejection\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRetriesRejectedFieldBeforeClientOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.302Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":91,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRetriesRejectedFieldBeforeClientOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.302Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=91 turn=1 response_id=resp_retry payload_bytes=44 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRetriesRejectedFieldBeforeClientOutput","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnRetriesRejectedFieldBeforeClientOutput (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRetriesRejectedFieldBeforeClientOutput","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety/turn_1"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety/turn_1","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety/turn_1\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety/turn_1","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.302Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":10,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety/turn_1","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety/turn_1 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety/turn_1","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety/turn_2"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety/turn_2","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety/turn_2\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety/turn_2","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.302Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":10,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety/turn_2","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety/turn_2 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety/turn_2","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient/turn2_error_frame"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient/turn2_error_frame","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient/turn2_error_frame\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient/turn2_error_frame","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.302Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":11,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient/turn2_error_frame","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient/turn2_error_frame (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient/turn2_error_frame","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient/turn2_bare_response_failed"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient/turn2_bare_response_failed","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient/turn2_bare_response_failed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient/turn2_bare_response_failed","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.302Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":11,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient/turn2_bare_response_failed","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.302Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=11 turn=2 response_id=resp_shed payload_bytes=55 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.fail last_event=response.fail first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient/turn2_bare_response_failed","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient/turn2_bare_response_failed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient/turn2_bare_response_failed","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorUsesAuthoritativeFailed"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorUsesAuthoritativeFailed","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnBareErrorUsesAuthoritativeFailed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorUsesAuthoritativeFailed","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.302Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":111,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorUsesAuthoritativeFailed","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:55.302Z\",\"logger\":\"slog\",\"msg\":\"account_disabled_auth_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":111,\"error\":\"OpenAI upstream account or workspace is unavailable\"}\n"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorUsesAuthoritativeFailed","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.302Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=111 turn=2 response_id=resp_fail payload_bytes=55 duration_ms=0 events=3 token_events=1 terminal_events=1 first_event=response.output_text.delta last_event=response.fail first_token_ms=0 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorUsesAuthoritativeFailed","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnBareErrorUsesAuthoritativeFailed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorUsesAuthoritativeFailed","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes"}
- {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/http_error_body"}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/http_error_body","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/http_error_body\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/http_error_body","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.303Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":112,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/http_error_body","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/http_error_body (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/http_error_body","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/sse_error_event"}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/sse_error_event","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/sse_error_event\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/sse_error_event","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.303Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":112,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/sse_error_event","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/sse_error_event (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/sse_error_event","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/sse_response_failed_event"}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/sse_response_failed_event","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/sse_response_failed_event\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/sse_response_failed_event","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.303Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":112,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/sse_response_failed_event","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.303Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=112 turn=1 response_id=resp_cyber payload_bytes=55 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.fail last_event=response.fail first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/sse_response_failed_event","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/sse_response_failed_event (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/sse_response_failed_event","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorEOFSynthesizesFailed"}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorEOFSynthesizesFailed","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnBareErrorEOFSynthesizesFailed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorEOFSynthesizesFailed","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.303Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":112,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorEOFSynthesizesFailed","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnBareErrorEOFSynthesizesFailed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorEOFSynthesizesFailed","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorFollowedByCompletedUsesCompleted"}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorFollowedByCompletedUsesCompleted","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnBareErrorFollowedByCompletedUsesCompleted\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorFollowedByCompletedUsesCompleted","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.303Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":113,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorFollowedByCompletedUsesCompleted","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.303Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=113 turn=2 response_id=resp_recovered payload_bytes=55 duration_ms=0 events=3 token_events=0 terminal_events=1 first_event=response.created last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorFollowedByCompletedUsesCompleted","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnBareErrorFollowedByCompletedUsesCompleted (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorFollowedByCompletedUsesCompleted","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnStagesMetadataBeforeCapacityFailover"}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnStagesMetadataBeforeCapacityFailover","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnStagesMetadataBeforeCapacityFailover\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnStagesMetadataBeforeCapacityFailover","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.303Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":12,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnStagesMetadataBeforeCapacityFailover","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnStagesMetadataBeforeCapacityFailover (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnStagesMetadataBeforeCapacityFailover","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnDoesNotReplayCapacityAfterSemanticOutput"}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnDoesNotReplayCapacityAfterSemanticOutput","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnDoesNotReplayCapacityAfterSemanticOutput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnDoesNotReplayCapacityAfterSemanticOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.303Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":13,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnDoesNotReplayCapacityAfterSemanticOutput","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:55.303Z\",\"msg\":\"gateway.failover_suppressed_after_semantic_output\",\"service\":\"sub2api\",\"env\":\"test\",\"path\":\"ws_http_bridge\",\"event_type\":\"response.failed\",\"upstream_request_id\":\"rid-ws-bridge-post-output\",\"account_id\":13,\"platform\":\"openai\"}\n"}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnDoesNotReplayCapacityAfterSemanticOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.303Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=13 turn=1 response_id=resp_partial payload_bytes=55 duration_ms=0 events=3 token_events=1 terminal_events=1 first_event=response.created last_event=response.fail first_token_ms=0 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnDoesNotReplayCapacityAfterSemanticOutput","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnDoesNotReplayCapacityAfterSemanticOutput (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnDoesNotReplayCapacityAfterSemanticOutput","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent"}
- {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3035647+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent/done_without_events_fails_over"}
- {"Time":"2026-09-12T11:38:55.3035647+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent/done_without_events_fails_over","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent/done_without_events_fails_over\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3035647+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent/done_without_events_fails_over","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.303Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":11,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.3035647+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent/done_without_events_fails_over","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent/done_without_events_fails_over (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3035647+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent/done_without_events_fails_over","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3035647+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent/created_then_done_fails_over_before_semantic_output"}
- {"Time":"2026-09-12T11:38:55.3035647+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent/created_then_done_fails_over_before_semantic_output","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent/created_then_done_fails_over_before_semantic_output\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3035647+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent/created_then_done_fails_over_before_semantic_output","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.303Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":11,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.3035647+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent/created_then_done_fails_over_before_semantic_output","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent/created_then_done_fails_over_before_semantic_output (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3035647+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent/created_then_done_fails_over_before_semantic_output","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3035647+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3035647+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3035647+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeRelaysSSEFramesAsWebSocketMessages"}
- {"Time":"2026-09-12T11:38:55.3035647+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeRelaysSSEFramesAsWebSocketMessages","Output":"=== RUN TestOpenAIWSHTTPBridgeRelaysSSEFramesAsWebSocketMessages\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3035647+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeRelaysSSEFramesAsWebSocketMessages","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.303Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":7,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.3035647+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeRelaysSSEFramesAsWebSocketMessages","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.303Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=7 turn=1 response_id=resp_bridge payload_bytes=198 duration_ms=0 events=3 token_events=1 terminal_events=1 first_event=response.created last_event=response.completed first_token_ms=0 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.3040721+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeRelaysSSEFramesAsWebSocketMessages","Output":"--- PASS: TestOpenAIWSHTTPBridgeRelaysSSEFramesAsWebSocketMessages (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3040721+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeRelaysSSEFramesAsWebSocketMessages","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3040721+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnForGrokDefaultsEmptyModelTo45"}
- {"Time":"2026-09-12T11:38:55.3040721+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnForGrokDefaultsEmptyModelTo45","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnForGrokDefaultsEmptyModelTo45\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3040721+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnForGrokDefaultsEmptyModelTo45","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.304Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=72 turn=1 response_id=resp_grok_default payload_bytes=69 duration_ms=0 events=2 token_events=0 terminal_events=1 first_event=response.created last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.3040721+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnForGrokDefaultsEmptyModelTo45","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnForGrokDefaultsEmptyModelTo45 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3040721+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnForGrokDefaultsEmptyModelTo45","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3040721+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnPromotesCodexAdditionalToolsForMixedCache"}
- {"Time":"2026-09-12T11:38:55.3040721+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnPromotesCodexAdditionalToolsForMixedCache","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnPromotesCodexAdditionalToolsForMixedCache\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3040721+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnPromotesCodexAdditionalToolsForMixedCache","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.304Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=73 turn=1 response_id=resp_grok_codex_lite payload_bytes=484 duration_ms=0 events=2 token_events=0 terminal_events=1 first_event=response.created last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.3040721+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnPromotesCodexAdditionalToolsForMixedCache","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnPromotesCodexAdditionalToolsForMixedCache (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.3040721+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnPromotesCodexAdditionalToolsForMixedCache","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.3040721+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAcceptsFirstFrameAboveLegacy16MiB"}
- {"Time":"2026-09-12T11:38:55.3040721+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAcceptsFirstFrameAboveLegacy16MiB","Output":"=== RUN TestOpenAIWSHTTPBridgeAcceptsFirstFrameAboveLegacy16MiB\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.5761348+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAcceptsFirstFrameAboveLegacy16MiB","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.576Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_start account_id=9 account_type=apikey payload_bytes=17825875 threshold_bytes=17826304 has_session_hash=true store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.7369364+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAcceptsFirstFrameAboveLegacy16MiB","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.736Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":9,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.7679847+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAcceptsFirstFrameAboveLegacy16MiB","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.767Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=9 turn=1 response_id=resp_large_bridge payload_bytes=17825875 duration_ms=59 events=2 token_events=0 terminal_events=1 first_event=response.created last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.8097144+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAcceptsFirstFrameAboveLegacy16MiB","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.809Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_client_closed account_id=9 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.8317321+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAcceptsFirstFrameAboveLegacy16MiB","Output":"--- PASS: TestOpenAIWSHTTPBridgeAcceptsFirstFrameAboveLegacy16MiB (0.53s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.8317321+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAcceptsFirstFrameAboveLegacy16MiB","Elapsed":0.53}
- {"Time":"2026-09-12T11:38:55.8317321+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeKeepsContinuationFramesOnHTTPWithoutPreviousResponseID"}
- {"Time":"2026-09-12T11:38:55.8317321+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeKeepsContinuationFramesOnHTTPWithoutPreviousResponseID","Output":"=== RUN TestOpenAIWSHTTPBridgeKeepsContinuationFramesOnHTTPWithoutPreviousResponseID\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.8322337+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeKeepsContinuationFramesOnHTTPWithoutPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.832Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_start account_id=19 account_type=apikey payload_bytes=74 threshold_bytes=1 has_session_hash=true store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.8322337+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeKeepsContinuationFramesOnHTTPWithoutPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.832Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":19,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.8322337+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeKeepsContinuationFramesOnHTTPWithoutPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.832Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=19 turn=1 response_id=resp_bridge_first payload_bytes=74 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.8322337+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeKeepsContinuationFramesOnHTTPWithoutPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.832Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_replay_input account_id=19 turn=2 input_items=3 previous_response_id_present=true has_tool_output=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.8322337+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeKeepsContinuationFramesOnHTTPWithoutPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.832Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":19,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.8322337+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeKeepsContinuationFramesOnHTTPWithoutPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.832Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=19 turn=2 response_id=resp_bridge_second payload_bytes=294 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.8322337+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeKeepsContinuationFramesOnHTTPWithoutPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.832Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_client_closed account_id=19 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.8322337+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeKeepsContinuationFramesOnHTTPWithoutPreviousResponseID","Output":"--- PASS: TestOpenAIWSHTTPBridgeKeepsContinuationFramesOnHTTPWithoutPreviousResponseID (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.8322337+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeKeepsContinuationFramesOnHTTPWithoutPreviousResponseID","Elapsed":0}
- {"Time":"2026-09-12T11:38:55.8322337+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridge_IdleTimeoutClosesClientSession"}
- {"Time":"2026-09-12T11:38:55.8322337+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridge_IdleTimeoutClosesClientSession","Output":"=== RUN TestOpenAIWSHTTPBridge_IdleTimeoutClosesClientSession\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:55.8327659+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridge_IdleTimeoutClosesClientSession","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.832Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_start account_id=20 account_type=apikey payload_bytes=75 threshold_bytes=1 has_session_hash=true store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:55.8327659+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridge_IdleTimeoutClosesClientSession","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.832Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":20,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:55.8327659+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridge_IdleTimeoutClosesClientSession","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.832Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=20 turn=1 response_id=resp_bridge_idle payload_bytes=75 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:56.8332305+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridge_IdleTimeoutClosesClientSession","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:56.833Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_inter_turn_idle_timeout account_id=20 timeout_seconds=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:56.8332305+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridge_IdleTimeoutClosesClientSession","Output":"--- PASS: TestOpenAIWSHTTPBridge_IdleTimeoutClosesClientSession (1.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:56.8332305+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridge_IdleTimeoutClosesClientSession","Elapsed":1}
- {"Time":"2026-09-12T11:38:56.8332305+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSActualHandshakeAndFramePreservation"}
- {"Time":"2026-09-12T11:38:56.8332305+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSActualHandshakeAndFramePreservation","Output":"=== RUN TestMode1WSSActualHandshakeAndFramePreservation\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:56.835232+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSActualHandshakeAndFramePreservation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:56.835Z\",\"logger\":\"slog\",\"msg\":\"tls_fingerprint_handshake_success\",\"service\":\"sub2api\",\"env\":\"test\",\"host\":\"127.0.0.1\",\"version\":772,\"cipher_suite\":4865,\"alpn\":\"http/1.1\"}\n"}
- {"Time":"2026-09-12T11:38:56.835232+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSActualHandshakeAndFramePreservation","Output":"--- PASS: TestMode1WSSActualHandshakeAndFramePreservation (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:56.835232+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSActualHandshakeAndFramePreservation","Elapsed":0}
- {"Time":"2026-09-12T11:38:56.835232+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSTransportCacheIsolationAndProfileRotation"}
- {"Time":"2026-09-12T11:38:56.835232+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSTransportCacheIsolationAndProfileRotation","Output":"=== RUN TestMode1WSSTransportCacheIsolationAndProfileRotation\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:56.83591+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSTransportCacheIsolationAndProfileRotation","Output":"--- PASS: TestMode1WSSTransportCacheIsolationAndProfileRotation (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:56.83591+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSTransportCacheIsolationAndProfileRotation","Elapsed":0}
- {"Time":"2026-09-12T11:38:56.83591+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate"}
- {"Time":"2026-09-12T11:38:56.83591+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate","Output":"=== RUN TestMode1WSSFailsClosedOnInvalidTLSAndCertificate\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:56.83591+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/untrusted_certificate"}
- {"Time":"2026-09-12T11:38:56.83591+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/untrusted_certificate","Output":"=== RUN TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/untrusted_certificate\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:56.8520252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/untrusted_certificate","Output":"--- PASS: TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/untrusted_certificate (0.02s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:56.8520252+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/untrusted_certificate","Elapsed":0.02}
- {"Time":"2026-09-12T11:38:56.8520252+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/invalid_ALPN_cannot_fall_back_to_ordinary_TLS"}
- {"Time":"2026-09-12T11:38:56.8520252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/invalid_ALPN_cannot_fall_back_to_ordinary_TLS","Output":"=== RUN TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/invalid_ALPN_cannot_fall_back_to_ordinary_TLS\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:56.8520252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/invalid_ALPN_cannot_fall_back_to_ordinary_TLS","Output":"--- PASS: TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/invalid_ALPN_cannot_fall_back_to_ordinary_TLS (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:56.8520252+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/invalid_ALPN_cannot_fall_back_to_ordinary_TLS","Elapsed":0}
- {"Time":"2026-09-12T11:38:56.8520252+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/plaintext_rejected"}
- {"Time":"2026-09-12T11:38:56.8520252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/plaintext_rejected","Output":"=== RUN TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/plaintext_rejected\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:56.8520252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/plaintext_rejected","Output":"--- PASS: TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/plaintext_rejected (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:56.8520252+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/plaintext_rejected","Elapsed":0}
- {"Time":"2026-09-12T11:38:56.8520252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate","Output":"--- PASS: TestMode1WSSFailsClosedOnInvalidTLSAndCertificate (0.02s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:56.8520252+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate","Elapsed":0.02}
- {"Time":"2026-09-12T11:38:56.8520252+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSConnectionPoolTransportCompatibility"}
- {"Time":"2026-09-12T11:38:56.8520252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSConnectionPoolTransportCompatibility","Output":"=== RUN TestMode1WSConnectionPoolTransportCompatibility\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:56.8535673+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSConnectionPoolTransportCompatibility","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:56.853Z\",\"logger\":\"slog\",\"msg\":\"tls_fingerprint_handshake_success\",\"service\":\"sub2api\",\"env\":\"test\",\"host\":\"127.0.0.1\",\"version\":772,\"cipher_suite\":4865,\"alpn\":\"http/1.1\"}\n"}
- {"Time":"2026-09-12T11:38:56.8546263+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSConnectionPoolTransportCompatibility","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:56.854Z\",\"logger\":\"slog\",\"msg\":\"tls_fingerprint_handshake_success\",\"service\":\"sub2api\",\"env\":\"test\",\"host\":\"127.0.0.1\",\"version\":772,\"cipher_suite\":4865,\"alpn\":\"http/1.1\"}\n"}
- {"Time":"2026-09-12T11:38:56.8556947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSConnectionPoolTransportCompatibility","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:56.855Z\",\"logger\":\"slog\",\"msg\":\"tls_fingerprint_handshake_success\",\"service\":\"sub2api\",\"env\":\"test\",\"host\":\"127.0.0.1\",\"version\":772,\"cipher_suite\":4865,\"alpn\":\"http/1.1\"}\n"}
- {"Time":"2026-09-12T11:38:56.8573194+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSConnectionPoolTransportCompatibility","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:56.856Z\",\"logger\":\"slog\",\"msg\":\"tls_fingerprint_handshake_success\",\"service\":\"sub2api\",\"env\":\"test\",\"host\":\"127.0.0.1\",\"version\":772,\"cipher_suite\":4865,\"alpn\":\"http/1.1\"}\n"}
- {"Time":"2026-09-12T11:38:56.8573194+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSConnectionPoolTransportCompatibility","Output":"--- PASS: TestMode1WSConnectionPoolTransportCompatibility (0.01s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:56.8573194+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSConnectionPoolTransportCompatibility","Elapsed":0.01}
- {"Time":"2026-09-12T11:38:56.8573194+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSAcquireUsesAccountTLSAndKeepsSessionsIsolated"}
- {"Time":"2026-09-12T11:38:56.8573194+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSAcquireUsesAccountTLSAndKeepsSessionsIsolated","Output":"=== RUN TestMode1WSAcquireUsesAccountTLSAndKeepsSessionsIsolated\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:56.8588886+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSAcquireUsesAccountTLSAndKeepsSessionsIsolated","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:56.858Z\",\"logger\":\"slog\",\"msg\":\"tls_fingerprint_handshake_success\",\"service\":\"sub2api\",\"env\":\"test\",\"host\":\"127.0.0.1\",\"version\":772,\"cipher_suite\":4865,\"alpn\":\"http/1.1\"}\n"}
- {"Time":"2026-09-12T11:38:56.8599366+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSAcquireUsesAccountTLSAndKeepsSessionsIsolated","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:56.859Z\",\"logger\":\"slog\",\"msg\":\"tls_fingerprint_handshake_success\",\"service\":\"sub2api\",\"env\":\"test\",\"host\":\"127.0.0.1\",\"version\":772,\"cipher_suite\":4865,\"alpn\":\"http/1.1\"}\n"}
- {"Time":"2026-09-12T11:38:56.8631168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSAcquireUsesAccountTLSAndKeepsSessionsIsolated","Output":"--- PASS: TestMode1WSAcquireUsesAccountTLSAndKeepsSessionsIsolated (0.01s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:56.8636316+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSAcquireUsesAccountTLSAndKeepsSessionsIsolated","Elapsed":0.01}
- {"Time":"2026-09-12T11:38:56.8636316+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSRuntimeConcurrencyCapCannotBeBypassed"}
- {"Time":"2026-09-12T11:38:56.8636316+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSRuntimeConcurrencyCapCannotBeBypassed","Output":"=== RUN TestMode1WSRuntimeConcurrencyCapCannotBeBypassed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:56.8636316+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSRuntimeConcurrencyCapCannotBeBypassed","Output":"--- PASS: TestMode1WSRuntimeConcurrencyCapCannotBeBypassed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:56.8636316+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSRuntimeConcurrencyCapCannotBeBypassed","Elapsed":0}
- {"Time":"2026-09-12T11:38:56.8636316+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS"}
- {"Time":"2026-09-12T11:38:56.8636316+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"=== RUN TestMode1WSPassthroughEntryReachesRealTLS\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:56.8641486+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:56.864Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=45 model=gpt-5.1 previous_response_id=- first_message_type=text first_message_bytes=123\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:56.8641486+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:56.864Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_start account_id=45 ws_host=chatgpt.com ws_path=/backend-api/codex/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:56.8641486+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:56.864Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":45,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:38:56.8641486+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:56.864Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":45,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:38:56.8652079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:56.865Z\",\"logger\":\"slog\",\"msg\":\"tls_fingerprint_handshake_success\",\"service\":\"sub2api\",\"env\":\"test\",\"host\":\"127.0.0.1\",\"version\":772,\"cipher_suite\":4865,\"alpn\":\"http/1.1\"}\n"}
- {"Time":"2026-09-12T11:38:56.8652079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:56.865Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_ok account_id=45 status_code=0 upstream_request_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:56.8652079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:56.865Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=45 stage=relay_start direction=- msg_type=text bytes=123 graceful=false wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:56.8652079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:56.865Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=45 stage=write_first_message_skipped direction=client_to_upstream msg_type=text bytes=123 graceful=false wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:56.8657194+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:56.865Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=45 stage=read_client_fail direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \\\"done\\\"\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:56.8657194+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:56.865Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=45 stage=first_exit direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \\\"done\\\"\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:57.8654034+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:57.865Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=45 stage=read_upstream_fail direction=upstream_to_client msg_type=- bytes=0 graceful=false wrote_downstream=true err=openai websocket passthrough first output timeout\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:57.8654034+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:57.865Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=45 stage=second_exit direction=upstream_to_client msg_type=- bytes=0 graceful=false wrote_downstream=true err=openai websocket passthrough first output timeout\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:57.8654034+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:57.865Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=45 stage=relay_client_closed direction=- msg_type=- bytes=0 graceful=true wrote_downstream=true err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:57.8654034+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:57.865Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_completed account_id=45 request_id=- terminal_event=- duration_ms=1000 c2u_frames=1 u2c_frames=1 dropped_frames=0 turns=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:57.8659057+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"--- PASS: TestMode1WSPassthroughEntryReachesRealTLS (1.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:57.8659057+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Elapsed":1}
- {"Time":"2026-09-12T11:38:57.8659057+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial"}
- {"Time":"2026-09-12T11:38:57.8659057+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial","Output":"=== RUN TestMode1WSIngressRejectsLossyPolicyBeforeDial\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:57.8659057+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/passthrough"}
- {"Time":"2026-09-12T11:38:57.8659057+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/passthrough","Output":"=== RUN TestMode1WSIngressRejectsLossyPolicyBeforeDial/passthrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:57.8669693+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/passthrough","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:57.866Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=46 model=gpt-5.4 previous_response_id=- first_message_type=text first_message_bytes=122\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:38:57.8674851+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/passthrough","Output":"--- PASS: TestMode1WSIngressRejectsLossyPolicyBeforeDial/passthrough (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:57.8674851+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/passthrough","Elapsed":0}
- {"Time":"2026-09-12T11:38:57.8674851+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/ctx_pool"}
- {"Time":"2026-09-12T11:38:57.8674851+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/ctx_pool","Output":"=== RUN TestMode1WSIngressRejectsLossyPolicyBeforeDial/ctx_pool\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:57.8685341+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/ctx_pool","Output":"--- PASS: TestMode1WSIngressRejectsLossyPolicyBeforeDial/ctx_pool (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:57.8685341+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/ctx_pool","Elapsed":0}
- {"Time":"2026-09-12T11:38:57.8685341+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial","Output":"--- PASS: TestMode1WSIngressRejectsLossyPolicyBeforeDial (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:57.8685341+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial","Elapsed":0}
- {"Time":"2026-09-12T11:38:57.8685341+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy"}
- {"Time":"2026-09-12T11:38:57.8685341+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy","Output":"=== RUN TestMode1WSSOverLocalHTTPAndHTTPSProxy\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:57.8685341+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/http"}
- {"Time":"2026-09-12T11:38:57.8685341+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/http","Output":"=== RUN TestMode1WSSOverLocalHTTPAndHTTPSProxy/http\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:57.8705892+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/http","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:57.870Z\",\"logger\":\"slog\",\"msg\":\"tls_fingerprint_handshake_success\",\"service\":\"sub2api\",\"env\":\"test\",\"host\":\"127.0.0.1\",\"version\":772,\"cipher_suite\":4865,\"alpn\":\"http/1.1\"}\n"}
- {"Time":"2026-09-12T11:38:57.8711074+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/http","Output":"--- PASS: TestMode1WSSOverLocalHTTPAndHTTPSProxy/http (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:57.8711074+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/http","Elapsed":0}
- {"Time":"2026-09-12T11:38:57.8711074+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/https"}
- {"Time":"2026-09-12T11:38:57.8711074+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/https","Output":"=== RUN TestMode1WSSOverLocalHTTPAndHTTPSProxy/https\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:57.873667+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/https","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:57.873Z\",\"logger\":\"slog\",\"msg\":\"tls_fingerprint_handshake_success\",\"service\":\"sub2api\",\"env\":\"test\",\"host\":\"127.0.0.1\",\"version\":772,\"cipher_suite\":4865,\"alpn\":\"http/1.1\"}\n"}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/https","Output":"--- PASS: TestMode1WSSOverLocalHTTPAndHTTPSProxy/https (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/https","Elapsed":0}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy","Output":"--- PASS: TestMode1WSSOverLocalHTTPAndHTTPSProxy (0.01s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy","Elapsed":0.01}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMarkOpenAIWSClientVisibleFailure_ResponseFailedNestedError"}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMarkOpenAIWSClientVisibleFailure_ResponseFailedNestedError","Output":"=== RUN TestMarkOpenAIWSClientVisibleFailure_ResponseFailedNestedError\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMarkOpenAIWSClientVisibleFailure_ResponseFailedNestedError","Output":"--- PASS: TestMarkOpenAIWSClientVisibleFailure_ResponseFailedNestedError (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMarkOpenAIWSClientVisibleFailure_ResponseFailedNestedError","Elapsed":0}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMarkOpenAIWSClientVisibleFailure_ErrorAndSuccessBoundary"}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMarkOpenAIWSClientVisibleFailure_ErrorAndSuccessBoundary","Output":"=== RUN TestMarkOpenAIWSClientVisibleFailure_ErrorAndSuccessBoundary\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMarkOpenAIWSClientVisibleFailure_ErrorAndSuccessBoundary/error"}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMarkOpenAIWSClientVisibleFailure_ErrorAndSuccessBoundary/error","Output":"=== RUN TestMarkOpenAIWSClientVisibleFailure_ErrorAndSuccessBoundary/error\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMarkOpenAIWSClientVisibleFailure_ErrorAndSuccessBoundary/error","Output":"--- PASS: TestMarkOpenAIWSClientVisibleFailure_ErrorAndSuccessBoundary/error (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMarkOpenAIWSClientVisibleFailure_ErrorAndSuccessBoundary/error","Elapsed":0}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMarkOpenAIWSClientVisibleFailure_ErrorAndSuccessBoundary/completed_does_not_mark"}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMarkOpenAIWSClientVisibleFailure_ErrorAndSuccessBoundary/completed_does_not_mark","Output":"=== RUN TestMarkOpenAIWSClientVisibleFailure_ErrorAndSuccessBoundary/completed_does_not_mark\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMarkOpenAIWSClientVisibleFailure_ErrorAndSuccessBoundary/completed_does_not_mark","Output":"--- PASS: TestMarkOpenAIWSClientVisibleFailure_ErrorAndSuccessBoundary/completed_does_not_mark (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMarkOpenAIWSClientVisibleFailure_ErrorAndSuccessBoundary/completed_does_not_mark","Elapsed":0}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMarkOpenAIWSClientVisibleFailure_ErrorAndSuccessBoundary","Output":"--- PASS: TestMarkOpenAIWSClientVisibleFailure_ErrorAndSuccessBoundary (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMarkOpenAIWSClientVisibleFailure_ErrorAndSuccessBoundary","Elapsed":0}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CleanupStaleAndTrimIdle"}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CleanupStaleAndTrimIdle","Output":"=== RUN TestOpenAIWSConnPool_CleanupStaleAndTrimIdle\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CleanupStaleAndTrimIdle","Output":"--- PASS: TestOpenAIWSConnPool_CleanupStaleAndTrimIdle (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CleanupStaleAndTrimIdle","Elapsed":0}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_NextConnIDFormat"}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_NextConnIDFormat","Output":"=== RUN TestOpenAIWSConnPool_NextConnIDFormat\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_NextConnIDFormat","Output":"--- PASS: TestOpenAIWSConnPool_NextConnIDFormat (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_NextConnIDFormat","Elapsed":0}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireCleanupInterval"}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireCleanupInterval","Output":"=== RUN TestOpenAIWSConnPool_AcquireCleanupInterval\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireCleanupInterval","Output":"--- PASS: TestOpenAIWSConnPool_AcquireCleanupInterval (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireCleanupInterval","Elapsed":0}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSRoutingAffinityPrefersCanonicalAndSortsVariants"}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSRoutingAffinityPrefersCanonicalAndSortsVariants","Output":"=== RUN TestNormalizeOpenAIWSRoutingAffinityPrefersCanonicalAndSortsVariants\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSRoutingAffinityPrefersCanonicalAndSortsVariants","Output":"--- PASS: TestNormalizeOpenAIWSRoutingAffinityPrefersCanonicalAndSortsVariants (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSRoutingAffinityPrefersCanonicalAndSortsVariants","Elapsed":0}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_WriteJSONAndGuards"}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_WriteJSONAndGuards","Output":"=== RUN TestOpenAIWSConnLease_WriteJSONAndGuards\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_WriteJSONAndGuards","Output":"--- PASS: TestOpenAIWSConnLease_WriteJSONAndGuards (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_WriteJSONAndGuards","Elapsed":0}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConn_WriteJSONWithTimeout_NilParentContextUsesBackground"}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConn_WriteJSONWithTimeout_NilParentContextUsesBackground","Output":"=== RUN TestOpenAIWSConn_WriteJSONWithTimeout_NilParentContextUsesBackground\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConn_WriteJSONWithTimeout_NilParentContextUsesBackground","Output":"--- PASS: TestOpenAIWSConn_WriteJSONWithTimeout_NilParentContextUsesBackground (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConn_WriteJSONWithTimeout_NilParentContextUsesBackground","Elapsed":0}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountAdaptive"}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountAdaptive","Output":"=== RUN TestOpenAIWSConnPool_TargetConnCountAdaptive\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountAdaptive","Output":"--- PASS: TestOpenAIWSConnPool_TargetConnCountAdaptive (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountAdaptive","Elapsed":0}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountMinIdleZero"}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountMinIdleZero","Output":"=== RUN TestOpenAIWSConnPool_TargetConnCountMinIdleZero\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountMinIdleZero","Output":"--- PASS: TestOpenAIWSConnPool_TargetConnCountMinIdleZero (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountMinIdleZero","Elapsed":0}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsync"}
- {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsync","Output":"=== RUN TestOpenAIWSConnPool_EnsureTargetIdleAsync\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:57.8947276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsync","Output":"--- PASS: TestOpenAIWSConnPool_EnsureTargetIdleAsync (0.02s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:57.8947276+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsync","Elapsed":0.02}
- {"Time":"2026-09-12T11:38:57.8947276+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsyncCooldown"}
- {"Time":"2026-09-12T11:38:57.8947276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsyncCooldown","Output":"=== RUN TestOpenAIWSConnPool_EnsureTargetIdleAsyncCooldown\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.5065147+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsyncCooldown","Output":"--- PASS: TestOpenAIWSConnPool_EnsureTargetIdleAsyncCooldown (0.61s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.5065147+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsyncCooldown","Elapsed":0.61}
- {"Time":"2026-09-12T11:38:58.5065147+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsyncFailureSuppress"}
- {"Time":"2026-09-12T11:38:58.5065147+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsyncFailureSuppress","Output":"=== RUN TestOpenAIWSConnPool_EnsureTargetIdleAsyncFailureSuppress\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.6672888+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsyncFailureSuppress","Output":"--- PASS: TestOpenAIWSConnPool_EnsureTargetIdleAsyncFailureSuppress (0.16s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.6672888+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsyncFailureSuppress","Elapsed":0.16}
- {"Time":"2026-09-12T11:38:58.6672888+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireQueueWaitMetrics"}
- {"Time":"2026-09-12T11:38:58.6672888+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireQueueWaitMetrics","Output":"=== RUN TestOpenAIWSConnPool_AcquireQueueWaitMetrics\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.7276703+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireQueueWaitMetrics","Output":"--- PASS: TestOpenAIWSConnPool_AcquireQueueWaitMetrics (0.06s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.7276703+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireQueueWaitMetrics","Elapsed":0.06}
- {"Time":"2026-09-12T11:38:58.7276703+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DialSuccessWakesTopologyWaiterAndCanceledWaiterDoesNotLoseLease"}
- {"Time":"2026-09-12T11:38:58.7276703+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DialSuccessWakesTopologyWaiterAndCanceledWaiterDoesNotLoseLease","Output":"=== RUN TestOpenAIWSConnPool_DialSuccessWakesTopologyWaiterAndCanceledWaiterDoesNotLoseLease\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.7334433+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DialSuccessWakesTopologyWaiterAndCanceledWaiterDoesNotLoseLease","Output":"--- PASS: TestOpenAIWSConnPool_DialSuccessWakesTopologyWaiterAndCanceledWaiterDoesNotLoseLease (0.01s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.7334433+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DialSuccessWakesTopologyWaiterAndCanceledWaiterDoesNotLoseLease","Elapsed":0.01}
- {"Time":"2026-09-12T11:38:58.7334433+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PrewarmHintChangeDoesNotInvalidateHealthyDial"}
- {"Time":"2026-09-12T11:38:58.7334433+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PrewarmHintChangeDoesNotInvalidateHealthyDial","Output":"=== RUN TestOpenAIWSConnPool_PrewarmHintChangeDoesNotInvalidateHealthyDial\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.7439376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PrewarmHintChangeDoesNotInvalidateHealthyDial","Output":"--- PASS: TestOpenAIWSConnPool_PrewarmHintChangeDoesNotInvalidateHealthyDial (0.01s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.7439376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PrewarmHintChangeDoesNotInvalidateHealthyDial","Elapsed":0.01}
- {"Time":"2026-09-12T11:38:58.7439376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ClearAccountWakesIncompatibleTopologyWaiter"}
- {"Time":"2026-09-12T11:38:58.7439376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ClearAccountWakesIncompatibleTopologyWaiter","Output":"=== RUN TestOpenAIWSConnPool_ClearAccountWakesIncompatibleTopologyWaiter\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ClearAccountWakesIncompatibleTopologyWaiter","Output":"--- PASS: TestOpenAIWSConnPool_ClearAccountWakesIncompatibleTopologyWaiter (0.05s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ClearAccountWakesIncompatibleTopologyWaiter","Elapsed":0.05}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ClearAccountDoesNotReviveInFlightDialGeneration"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ClearAccountDoesNotReviveInFlightDialGeneration","Output":"=== RUN TestOpenAIWSConnPool_ClearAccountDoesNotReviveInFlightDialGeneration\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ClearAccountDoesNotReviveInFlightDialGeneration","Output":"--- PASS: TestOpenAIWSConnPool_ClearAccountDoesNotReviveInFlightDialGeneration (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ClearAccountDoesNotReviveInFlightDialGeneration","Elapsed":0}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ForceNewConnSkipsReuse"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ForceNewConnSkipsReuse","Output":"=== RUN TestOpenAIWSConnPool_ForceNewConnSkipsReuse\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ForceNewConnSkipsReuse","Output":"--- PASS: TestOpenAIWSConnPool_ForceNewConnSkipsReuse (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ForceNewConnSkipsReuse","Elapsed":0}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReusesOnlyMatchingBetaFeatures"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReusesOnlyMatchingBetaFeatures","Output":"=== RUN TestOpenAIWSConnPool_AcquireReusesOnlyMatchingBetaFeatures\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReusesOnlyMatchingBetaFeatures","Output":"--- PASS: TestOpenAIWSConnPool_AcquireReusesOnlyMatchingBetaFeatures (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReusesOnlyMatchingBetaFeatures","Elapsed":0}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReusesSameStableIdentityWithDifferentTurnMetadata"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReusesSameStableIdentityWithDifferentTurnMetadata","Output":"=== RUN TestOpenAIWSConnPool_AcquireReusesSameStableIdentityWithDifferentTurnMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReusesSameStableIdentityWithDifferentTurnMetadata","Output":"--- PASS: TestOpenAIWSConnPool_AcquireReusesSameStableIdentityWithDifferentTurnMetadata (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReusesSameStableIdentityWithDifferentTurnMetadata","Elapsed":0}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity","Output":"=== RUN TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/installation"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/installation","Output":"=== RUN TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/installation\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/installation","Output":"--- PASS: TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/installation (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/installation","Elapsed":0}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/session_hyphen"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/session_hyphen","Output":"=== RUN TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/session_hyphen\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/session_hyphen","Output":"--- PASS: TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/session_hyphen (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/session_hyphen","Elapsed":0}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/session_underscore"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/session_underscore","Output":"=== RUN TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/session_underscore\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/session_underscore","Output":"--- PASS: TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/session_underscore (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/session_underscore","Elapsed":0}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/thread"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/thread","Output":"=== RUN TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/thread\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/thread","Output":"--- PASS: TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/thread (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/thread","Elapsed":0}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/client_request"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/client_request","Output":"=== RUN TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/client_request\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/client_request","Output":"--- PASS: TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/client_request (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/client_request","Elapsed":0}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/window"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/window","Output":"=== RUN TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/window\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/window","Output":"--- PASS: TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/window (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/window","Elapsed":0}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity","Output":"--- PASS: TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity","Elapsed":0}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireRoutingHintRemainsSoftAffinity"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireRoutingHintRemainsSoftAffinity","Output":"=== RUN TestOpenAIWSConnPool_AcquireRoutingHintRemainsSoftAffinity\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireRoutingHintRemainsSoftAffinity","Output":"--- PASS: TestOpenAIWSConnPool_AcquireRoutingHintRemainsSoftAffinity (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireRoutingHintRemainsSoftAffinity","Elapsed":0}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DeviceModeKeysOnlyInstallationIdentity"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DeviceModeKeysOnlyInstallationIdentity","Output":"=== RUN TestOpenAIWSConnPool_DeviceModeKeysOnlyInstallationIdentity\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DeviceModeKeysOnlyInstallationIdentity","Output":"--- PASS: TestOpenAIWSConnPool_DeviceModeKeysOnlyInstallationIdentity (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DeviceModeKeysOnlyInstallationIdentity","Elapsed":0}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReplacesIdleConnWithDifferentBetaFeatures"}
- {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReplacesIdleConnWithDifferentBetaFeatures","Output":"=== RUN TestOpenAIWSConnPool_AcquireReplacesIdleConnWithDifferentBetaFeatures\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.7947576+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReplacesIdleConnWithDifferentBetaFeatures","Output":"--- PASS: TestOpenAIWSConnPool_AcquireReplacesIdleConnWithDifferentBetaFeatures (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.7947576+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReplacesIdleConnWithDifferentBetaFeatures","Elapsed":0}
- {"Time":"2026-09-12T11:38:58.7947576+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireWaitsForBusyIncompatibleConnection"}
- {"Time":"2026-09-12T11:38:58.7947576+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireWaitsForBusyIncompatibleConnection","Output":"=== RUN TestOpenAIWSConnPool_AcquireWaitsForBusyIncompatibleConnection\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.8451145+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireWaitsForBusyIncompatibleConnection","Output":"--- PASS: TestOpenAIWSConnPool_AcquireWaitsForBusyIncompatibleConnection (0.05s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.8451145+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireWaitsForBusyIncompatibleConnection","Elapsed":0.05}
- {"Time":"2026-09-12T11:38:58.8451145+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReplacesIncompatibleIdleWhenMatchingBusy"}
- {"Time":"2026-09-12T11:38:58.8451145+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReplacesIncompatibleIdleWhenMatchingBusy","Output":"=== RUN TestOpenAIWSConnPool_AcquireReplacesIncompatibleIdleWhenMatchingBusy\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.8451145+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReplacesIncompatibleIdleWhenMatchingBusy","Output":"--- PASS: TestOpenAIWSConnPool_AcquireReplacesIncompatibleIdleWhenMatchingBusy (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.8451145+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReplacesIncompatibleIdleWhenMatchingBusy","Elapsed":0}
- {"Time":"2026-09-12T11:38:58.8451145+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnUnavailable"}
- {"Time":"2026-09-12T11:38:58.8451145+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnUnavailable","Output":"=== RUN TestOpenAIWSConnPool_AcquireForcePreferredConnUnavailable\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.8451145+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnUnavailable","Output":"--- PASS: TestOpenAIWSConnPool_AcquireForcePreferredConnUnavailable (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.8451145+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnUnavailable","Elapsed":0}
- {"Time":"2026-09-12T11:38:58.8451145+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnQueuesOnPreferredOnly"}
- {"Time":"2026-09-12T11:38:58.8451145+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnQueuesOnPreferredOnly","Output":"=== RUN TestOpenAIWSConnPool_AcquireForcePreferredConnQueuesOnPreferredOnly\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnQueuesOnPreferredOnly","Output":"--- PASS: TestOpenAIWSConnPool_AcquireForcePreferredConnQueuesOnPreferredOnly (0.06s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnQueuesOnPreferredOnly","Elapsed":0.06}
- {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnDirectAndQueueFull"}
- {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnDirectAndQueueFull","Output":"=== RUN TestOpenAIWSConnPool_AcquireForcePreferredConnDirectAndQueueFull\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnDirectAndQueueFull","Output":"--- PASS: TestOpenAIWSConnPool_AcquireForcePreferredConnDirectAndQueueFull (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnDirectAndQueueFull","Elapsed":0}
- {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CleanupSkipsPinnedConn"}
- {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CleanupSkipsPinnedConn","Output":"=== RUN TestOpenAIWSConnPool_CleanupSkipsPinnedConn\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CleanupSkipsPinnedConn","Output":"--- PASS: TestOpenAIWSConnPool_CleanupSkipsPinnedConn (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CleanupSkipsPinnedConn","Elapsed":0}
- {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PinUnpinConnBranches"}
- {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PinUnpinConnBranches","Output":"=== RUN TestOpenAIWSConnPool_PinUnpinConnBranches\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PinUnpinConnBranches","Output":"--- PASS: TestOpenAIWSConnPool_PinUnpinConnBranches (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PinUnpinConnBranches","Elapsed":0}
- {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsByAccount"}
- {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsByAccount","Output":"=== RUN TestOpenAIWSConnPool_EffectiveMaxConnsByAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsByAccount","Output":"--- PASS: TestOpenAIWSConnPool_EffectiveMaxConnsByAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsByAccount","Elapsed":0}
- {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsDisabledFallbackHardCap"}
- {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsDisabledFallbackHardCap","Output":"=== RUN TestOpenAIWSConnPool_EffectiveMaxConnsDisabledFallbackHardCap\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsDisabledFallbackHardCap","Output":"--- PASS: TestOpenAIWSConnPool_EffectiveMaxConnsDisabledFallbackHardCap (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsDisabledFallbackHardCap","Elapsed":0}
- {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsByAccount_ModeRouterV2RespectsHardCap"}
- {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsByAccount_ModeRouterV2RespectsHardCap","Output":"=== RUN TestOpenAIWSConnPool_EffectiveMaxConnsByAccount_ModeRouterV2RespectsHardCap\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsByAccount_ModeRouterV2RespectsHardCap","Output":"--- PASS: TestOpenAIWSConnPool_EffectiveMaxConnsByAccount_ModeRouterV2RespectsHardCap (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsByAccount_ModeRouterV2RespectsHardCap","Elapsed":0}
- {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireRejectsWhenEffectiveMaxConnsIsZero"}
- {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireRejectsWhenEffectiveMaxConnsIsZero","Output":"=== RUN TestOpenAIWSConnPool_AcquireRejectsWhenEffectiveMaxConnsIsZero\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireRejectsWhenEffectiveMaxConnsIsZero","Output":"--- PASS: TestOpenAIWSConnPool_AcquireRejectsWhenEffectiveMaxConnsIsZero (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireRejectsWhenEffectiveMaxConnsIsZero","Elapsed":0}
- {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_ReadMessageWithContextTimeout_PerRead"}
- {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_ReadMessageWithContextTimeout_PerRead","Output":"=== RUN TestOpenAIWSConnLease_ReadMessageWithContextTimeout_PerRead\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.0059588+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_ReadMessageWithContextTimeout_PerRead","Output":"--- PASS: TestOpenAIWSConnLease_ReadMessageWithContextTimeout_PerRead (0.10s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.0059588+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_ReadMessageWithContextTimeout_PerRead","Elapsed":0.1}
- {"Time":"2026-09-12T11:38:59.0059588+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_WriteJSONWithContextTimeout_RespectsParentContext"}
- {"Time":"2026-09-12T11:38:59.0059588+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_WriteJSONWithContextTimeout_RespectsParentContext","Output":"=== RUN TestOpenAIWSConnLease_WriteJSONWithContextTimeout_RespectsParentContext\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.0262941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_WriteJSONWithContextTimeout_RespectsParentContext","Output":"--- PASS: TestOpenAIWSConnLease_WriteJSONWithContextTimeout_RespectsParentContext (0.02s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.0262941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_WriteJSONWithContextTimeout_RespectsParentContext","Elapsed":0.02}
- {"Time":"2026-09-12T11:38:59.0262941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_PingWithTimeout"}
- {"Time":"2026-09-12T11:38:59.0262941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_PingWithTimeout","Output":"=== RUN TestOpenAIWSConnLease_PingWithTimeout\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.0262941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_PingWithTimeout","Output":"--- PASS: TestOpenAIWSConnLease_PingWithTimeout (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.0262941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_PingWithTimeout","Elapsed":0}
- {"Time":"2026-09-12T11:38:59.0262941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConn_ReadAndWriteCanProceedConcurrently"}
- {"Time":"2026-09-12T11:38:59.0262941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConn_ReadAndWriteCanProceedConcurrently","Output":"=== RUN TestOpenAIWSConn_ReadAndWriteCanProceedConcurrently\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConn_ReadAndWriteCanProceedConcurrently","Output":"--- PASS: TestOpenAIWSConn_ReadAndWriteCanProceedConcurrently (0.12s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConn_ReadAndWriteCanProceedConcurrently","Elapsed":0.12}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundPingSweep_EvictsDeadIdleConn"}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundPingSweep_EvictsDeadIdleConn","Output":"=== RUN TestOpenAIWSConnPool_BackgroundPingSweep_EvictsDeadIdleConn\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundPingSweep_EvictsDeadIdleConn","Output":"--- PASS: TestOpenAIWSConnPool_BackgroundPingSweep_EvictsDeadIdleConn (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundPingSweep_EvictsDeadIdleConn","Elapsed":0}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundCleanupSweep_WithoutAcquire"}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundCleanupSweep_WithoutAcquire","Output":"=== RUN TestOpenAIWSConnPool_BackgroundCleanupSweep_WithoutAcquire\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundCleanupSweep_WithoutAcquire","Output":"--- PASS: TestOpenAIWSConnPool_BackgroundCleanupSweep_WithoutAcquire (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundCleanupSweep_WithoutAcquire","Elapsed":0}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RecyclesUnsupportedIdlePingConnection"}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RecyclesUnsupportedIdlePingConnection","Output":"=== RUN TestOpenAIWSConnPool_RecyclesUnsupportedIdlePingConnection\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RecyclesUnsupportedIdlePingConnection","Output":"--- PASS: TestOpenAIWSConnPool_RecyclesUnsupportedIdlePingConnection (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RecyclesUnsupportedIdlePingConnection","Elapsed":0}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundWorkerGuardBranches"}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundWorkerGuardBranches","Output":"=== RUN TestOpenAIWSConnPool_BackgroundWorkerGuardBranches\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundWorkerGuardBranches","Output":"--- PASS: TestOpenAIWSConnPool_BackgroundWorkerGuardBranches (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundWorkerGuardBranches","Elapsed":0}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_SnapshotIdleConnsForPing_SkipsInvalidEntries"}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_SnapshotIdleConnsForPing_SkipsInvalidEntries","Output":"=== RUN TestOpenAIWSConnPool_SnapshotIdleConnsForPing_SkipsInvalidEntries\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_SnapshotIdleConnsForPing_SkipsInvalidEntries","Output":"--- PASS: TestOpenAIWSConnPool_SnapshotIdleConnsForPing_SkipsInvalidEntries (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_SnapshotIdleConnsForPing_SkipsInvalidEntries","Elapsed":0}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RunBackgroundCleanupSweep_SkipsInvalidAndUsesAccountCap"}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RunBackgroundCleanupSweep_SkipsInvalidAndUsesAccountCap","Output":"=== RUN TestOpenAIWSConnPool_RunBackgroundCleanupSweep_SkipsInvalidAndUsesAccountCap\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RunBackgroundCleanupSweep_SkipsInvalidAndUsesAccountCap","Output":"--- PASS: TestOpenAIWSConnPool_RunBackgroundCleanupSweep_SkipsInvalidAndUsesAccountCap (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RunBackgroundCleanupSweep_SkipsInvalidAndUsesAccountCap","Elapsed":0}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_QueueLimitPerConn_DefaultAndConfigured"}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_QueueLimitPerConn_DefaultAndConfigured","Output":"=== RUN TestOpenAIWSConnPool_QueueLimitPerConn_DefaultAndConfigured\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_QueueLimitPerConn_DefaultAndConfigured","Output":"--- PASS: TestOpenAIWSConnPool_QueueLimitPerConn_DefaultAndConfigured (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_QueueLimitPerConn_DefaultAndConfigured","Elapsed":0}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close"}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close","Output":"=== RUN TestOpenAIWSConnPool_Close\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close","Output":"--- PASS: TestOpenAIWSConnPool_Close (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close","Elapsed":0}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDialError_ErrorAndUnwrap"}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDialError_ErrorAndUnwrap","Output":"=== RUN TestOpenAIWSDialError_ErrorAndUnwrap\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDialError_ErrorAndUnwrap","Output":"--- PASS: TestOpenAIWSDialError_ErrorAndUnwrap (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDialError_ErrorAndUnwrap","Elapsed":0}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_ReadWriteHelpersAndConnStats"}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_ReadWriteHelpersAndConnStats","Output":"=== RUN TestOpenAIWSConnLease_ReadWriteHelpersAndConnStats\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_ReadWriteHelpersAndConnStats","Output":"--- PASS: TestOpenAIWSConnLease_ReadWriteHelpersAndConnStats (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_ReadWriteHelpersAndConnStats","Elapsed":0}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PickOldestIdleAndAccountPoolLoad"}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PickOldestIdleAndAccountPoolLoad","Output":"=== RUN TestOpenAIWSConnPool_PickOldestIdleAndAccountPoolLoad\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PickOldestIdleAndAccountPoolLoad","Output":"--- PASS: TestOpenAIWSConnPool_PickOldestIdleAndAccountPoolLoad (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PickOldestIdleAndAccountPoolLoad","Elapsed":0}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close_WaitsWorkerGroupAndNilStopChannel"}
- {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close_WaitsWorkerGroupAndNilStopChannel","Output":"=== RUN TestOpenAIWSConnPool_Close_WaitsWorkerGroupAndNilStopChannel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1775072+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close_WaitsWorkerGroupAndNilStopChannel","Output":"--- PASS: TestOpenAIWSConnPool_Close_WaitsWorkerGroupAndNilStopChannel (0.03s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1775072+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close_WaitsWorkerGroupAndNilStopChannel","Elapsed":0.03}
- {"Time":"2026-09-12T11:38:59.1775072+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close_ClosesOnlyIdleConnections"}
- {"Time":"2026-09-12T11:38:59.1775072+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close_ClosesOnlyIdleConnections","Output":"=== RUN TestOpenAIWSConnPool_Close_ClosesOnlyIdleConnections\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1775072+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close_ClosesOnlyIdleConnections","Output":"--- PASS: TestOpenAIWSConnPool_Close_ClosesOnlyIdleConnections (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1775072+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close_ClosesOnlyIdleConnections","Elapsed":0}
- {"Time":"2026-09-12T11:38:59.1775072+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RunBackgroundPingSweep_ConcurrencyLimit"}
- {"Time":"2026-09-12T11:38:59.1775072+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RunBackgroundPingSweep_ConcurrencyLimit","Output":"=== RUN TestOpenAIWSConnPool_RunBackgroundPingSweep_ConcurrencyLimit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RunBackgroundPingSweep_ConcurrencyLimit","Output":"--- PASS: TestOpenAIWSConnPool_RunBackgroundPingSweep_ConcurrencyLimit (0.01s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RunBackgroundPingSweep_ConcurrencyLimit","Elapsed":0.01}
- {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_BasicGetterBranches"}
- {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_BasicGetterBranches","Output":"=== RUN TestOpenAIWSConnLease_BasicGetterBranches\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_BasicGetterBranches","Output":"--- PASS: TestOpenAIWSConnLease_BasicGetterBranches (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_BasicGetterBranches","Elapsed":0}
- {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_UtilityBranches"}
- {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_UtilityBranches","Output":"=== RUN TestOpenAIWSConnPool_UtilityBranches\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_UtilityBranches","Output":"--- PASS: TestOpenAIWSConnPool_UtilityBranches (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_UtilityBranches","Elapsed":0}
- {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConn_LeaseAndTimeHelpers_NilAndClosedBranches"}
- {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConn_LeaseAndTimeHelpers_NilAndClosedBranches","Output":"=== RUN TestOpenAIWSConn_LeaseAndTimeHelpers_NilAndClosedBranches\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConn_LeaseAndTimeHelpers_NilAndClosedBranches","Output":"--- PASS: TestOpenAIWSConn_LeaseAndTimeHelpers_NilAndClosedBranches (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConn_LeaseAndTimeHelpers_NilAndClosedBranches","Elapsed":0}
- {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_ReadWriteNilConnBranches"}
- {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_ReadWriteNilConnBranches","Output":"=== RUN TestOpenAIWSConnLease_ReadWriteNilConnBranches\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_ReadWriteNilConnBranches","Output":"--- PASS: TestOpenAIWSConnLease_ReadWriteNilConnBranches (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_ReadWriteNilConnBranches","Elapsed":0}
- {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_ReleasedLeaseGuards"}
- {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_ReleasedLeaseGuards","Output":"=== RUN TestOpenAIWSConnLease_ReleasedLeaseGuards\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_ReleasedLeaseGuards","Output":"--- PASS: TestOpenAIWSConnLease_ReleasedLeaseGuards (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_ReleasedLeaseGuards","Elapsed":0}
- {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_MarkBrokenAfterRelease_NoEviction"}
- {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_MarkBrokenAfterRelease_NoEviction","Output":"=== RUN TestOpenAIWSConnLease_MarkBrokenAfterRelease_NoEviction\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_MarkBrokenAfterRelease_NoEviction","Output":"--- PASS: TestOpenAIWSConnLease_MarkBrokenAfterRelease_NoEviction (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_MarkBrokenAfterRelease_NoEviction","Elapsed":0}
- {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConn_AdditionalGuardBranches"}
- {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConn_AdditionalGuardBranches","Output":"=== RUN TestOpenAIWSConn_AdditionalGuardBranches\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConn_AdditionalGuardBranches","Output":"--- PASS: TestOpenAIWSConn_AdditionalGuardBranches (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConn_AdditionalGuardBranches","Elapsed":0}
- {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CanceledWaiterReturnsDeliveredLease"}
- {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CanceledWaiterReturnsDeliveredLease","Output":"=== RUN TestOpenAIWSConnPool_CanceledWaiterReturnsDeliveredLease\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CanceledWaiterReturnsDeliveredLease","Output":"--- PASS: TestOpenAIWSConnPool_CanceledWaiterReturnsDeliveredLease (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CanceledWaiterReturnsDeliveredLease","Elapsed":0}
- {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_MarkBrokenEvictsConn"}
- {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_MarkBrokenEvictsConn","Output":"=== RUN TestOpenAIWSConnLease_MarkBrokenEvictsConn\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_MarkBrokenEvictsConn","Output":"--- PASS: TestOpenAIWSConnLease_MarkBrokenEvictsConn (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_MarkBrokenEvictsConn","Elapsed":0}
- {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountAndPrewarmBranches"}
- {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountAndPrewarmBranches","Output":"=== RUN TestOpenAIWSConnPool_TargetConnCountAndPrewarmBranches\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:00.2548356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountAndPrewarmBranches","Output":"--- PASS: TestOpenAIWSConnPool_TargetConnCountAndPrewarmBranches (1.07s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:00.2548356+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountAndPrewarmBranches","Elapsed":1.07}
- {"Time":"2026-09-12T11:39:00.2548356+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Acquire_ErrorBranches"}
- {"Time":"2026-09-12T11:39:00.2548356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Acquire_ErrorBranches","Output":"=== RUN TestOpenAIWSConnPool_Acquire_ErrorBranches\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:00.2548356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Acquire_ErrorBranches","Output":"--- PASS: TestOpenAIWSConnPool_Acquire_ErrorBranches (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:00.2548356+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Acquire_ErrorBranches","Elapsed":0}
- {"Time":"2026-09-12T11:39:00.2548356+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DialConnNilConnection"}
- {"Time":"2026-09-12T11:39:00.2548356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DialConnNilConnection","Output":"=== RUN TestOpenAIWSConnPool_DialConnNilConnection\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:00.2548356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DialConnNilConnection","Output":"--- PASS: TestOpenAIWSConnPool_DialConnNilConnection (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:00.2548356+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DialConnNilConnection","Elapsed":0}
- {"Time":"2026-09-12T11:39:00.2548356+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_SnapshotTransportMetrics"}
- {"Time":"2026-09-12T11:39:00.2548356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_SnapshotTransportMetrics","Output":"=== RUN TestOpenAIWSConnPool_SnapshotTransportMetrics\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:00.2548356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_SnapshotTransportMetrics","Output":"--- PASS: TestOpenAIWSConnPool_SnapshotTransportMetrics (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:00.2548356+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_SnapshotTransportMetrics","Elapsed":0}
- {"Time":"2026-09-12T11:39:00.2548356+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled"}
- {"Time":"2026-09-12T11:39:00.2548356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"=== RUN TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:00.2553376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:00.255Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=1 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:00.2553376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:00.255Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=1 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:00.2553376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:00.255Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=1 account_type=apikey ws_host=127.0.0.1:54933 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:00.2553376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:00.255Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=1 attempt=1 event=response.create payload_keys=input,model,previous_response_id,stream,type payload_bytes=140 payload_key_sizes=input:34,type:15,previous_response_id:8,model:7,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=true has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:00.2553376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:00.255Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":1,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:00.2553376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:00.255Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=1 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:00.2558591+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:00.255Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=1 account_type=apikey transport=responses_websockets_v2 reason=dial_fail dial_status=404 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=- cause=openai ws dial fail: status=404 err=fail to WebSocket dial: expected handshake response status code 101 but got 404 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:54933 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:00.2558591+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:00.255Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=1 retry=1 max_retries=5 reason=dial_fail backoff_ms=120\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:00.3763652+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:00.376Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=1 account_type=apikey ws_host=127.0.0.1:54933 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:00.3763652+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:00.376Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":1,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:00.3763652+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:00.376Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=1 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=dial_fail force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:00.3768666+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:00.376Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=1 account_type=apikey transport=responses_websockets_v2 reason=dial_fail dial_status=404 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=- cause=openai ws dial fail: status=404 err=fail to WebSocket dial: expected handshake response status code 101 but got 404 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:54933 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:00.3768666+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:00.376Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=1 retry=2 max_retries=5 reason=dial_fail backoff_ms=240\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:00.6171004+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:00.617Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=1 account_type=apikey ws_host=127.0.0.1:54933 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:00.6171004+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:00.617Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":1,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:00.6171004+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:00.617Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=1 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=dial_fail force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:00.6171004+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:00.617Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=1 account_type=apikey transport=responses_websockets_v2 reason=dial_fail dial_status=404 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=- cause=openai ws dial fail: status=404 err=fail to WebSocket dial: expected handshake response status code 101 but got 404 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:54933 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:00.6171004+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:00.617Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=1 retry=3 max_retries=5 reason=dial_fail backoff_ms=480\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:01.0977649+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:01.097Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=1 account_type=apikey ws_host=127.0.0.1:54933 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:01.0977649+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:01.097Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":1,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:01.0977649+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:01.097Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=1 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=dial_fail force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:01.0984617+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:01.098Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=1 account_type=apikey transport=responses_websockets_v2 reason=dial_fail dial_status=404 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=- cause=openai ws dial fail: status=404 err=fail to WebSocket dial: expected handshake response status code 101 but got 404 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:54933 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:01.0984617+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:01.098Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=1 retry=4 max_retries=5 reason=dial_fail backoff_ms=960\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:02.0589673+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:02.058Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=1 account_type=apikey ws_host=127.0.0.1:54933 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:02.0589673+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:02.058Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":1,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:02.0589673+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:02.058Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=1 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=dial_fail force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:02.0589673+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:02.058Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=1 account_type=apikey transport=responses_websockets_v2 reason=dial_fail dial_status=404 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=- cause=openai ws dial fail: status=404 err=fail to WebSocket dial: expected handshake response status code 101 but got 404 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:54933 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:02.0589673+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:02.058Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=1 retry=5 max_retries=5 reason=dial_fail backoff_ms=1920\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:03.9790721+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:03.979Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=1 account_type=apikey ws_host=127.0.0.1:54933 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:03.9790721+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:03.979Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":1,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:03.9790721+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:03.979Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=1 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=dial_fail force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:03.9790721+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:03.979Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=1 account_type=apikey transport=responses_websockets_v2 reason=dial_fail dial_status=404 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=- cause=openai ws dial fail: status=404 err=fail to WebSocket dial: expected handshake response status code 101 but got 404 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:54933 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:03.9790721+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:03.979Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_exhausted account_id=1 attempts=6 max_retries=5 reason=dial_fail\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:03.9796395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"--- PASS: TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled (3.72s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:03.9796395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Elapsed":3.72}
- {"Time":"2026-09-12T11:39:03.9796395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressStaysHTTPWhenWSEnabled"}
- {"Time":"2026-09-12T11:39:03.9796395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressStaysHTTPWhenWSEnabled","Output":"=== RUN TestOpenAIGatewayService_Forward_HTTPIngressStaysHTTPWhenWSEnabled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:03.9796395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressStaysHTTPWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:03.979Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":101,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:39:03.9796395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressStaysHTTPWhenWSEnabled","Output":"--- PASS: TestOpenAIGatewayService_Forward_HTTPIngressStaysHTTPWhenWSEnabled (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:03.9796395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressStaysHTTPWhenWSEnabled","Elapsed":0}
- {"Time":"2026-09-12T11:39:03.9796395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressRetriesInvalidEncryptedContentOnce"}
- {"Time":"2026-09-12T11:39:03.9796395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressRetriesInvalidEncryptedContentOnce","Output":"=== RUN TestOpenAIGatewayService_Forward_HTTPIngressRetriesInvalidEncryptedContentOnce\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:03.9801501+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressRetriesInvalidEncryptedContentOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:03.980Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":102,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:39:03.9801501+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressRetriesInvalidEncryptedContentOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:03.980Z\",\"msg\":\"[OpenAI] Retrying non-WSv2 request once after invalid_encrypted_content (account: openai-apikey)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:03.9801501+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressRetriesInvalidEncryptedContentOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:03.980Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":102,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:39:03.9801501+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressRetriesInvalidEncryptedContentOnce","Output":"--- PASS: TestOpenAIGatewayService_Forward_HTTPIngressRetriesInvalidEncryptedContentOnce (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:03.9801501+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressRetriesInvalidEncryptedContentOnce","Elapsed":0}
- {"Time":"2026-09-12T11:39:03.9801501+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressRetriesWrappedInvalidEncryptedContentOnce"}
- {"Time":"2026-09-12T11:39:03.9801501+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressRetriesWrappedInvalidEncryptedContentOnce","Output":"=== RUN TestOpenAIGatewayService_Forward_HTTPIngressRetriesWrappedInvalidEncryptedContentOnce\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:03.9801501+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressRetriesWrappedInvalidEncryptedContentOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:03.980Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":103,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:39:03.9801501+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressRetriesWrappedInvalidEncryptedContentOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:03.980Z\",\"msg\":\"[OpenAI] Retrying non-WSv2 request once after invalid_encrypted_content (account: openai-apikey-wrapped)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:03.9801501+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressRetriesWrappedInvalidEncryptedContentOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:03.980Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":103,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:39:03.9801501+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressRetriesWrappedInvalidEncryptedContentOnce","Output":"--- PASS: TestOpenAIGatewayService_Forward_HTTPIngressRetriesWrappedInvalidEncryptedContentOnce (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:03.9801501+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressRetriesWrappedInvalidEncryptedContentOnce","Elapsed":0}
- {"Time":"2026-09-12T11:39:03.9801501+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_APIKeyHTTPPreservesPreviousResponseIDWhenWSDisabled"}
- {"Time":"2026-09-12T11:39:03.9801501+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_APIKeyHTTPPreservesPreviousResponseIDWhenWSDisabled","Output":"=== RUN TestOpenAIGatewayService_Forward_APIKeyHTTPPreservesPreviousResponseIDWhenWSDisabled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:03.9807043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_APIKeyHTTPPreservesPreviousResponseIDWhenWSDisabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:03.980Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:39:03.9807043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_APIKeyHTTPPreservesPreviousResponseIDWhenWSDisabled","Output":"--- PASS: TestOpenAIGatewayService_Forward_APIKeyHTTPPreservesPreviousResponseIDWhenWSDisabled (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:03.9807043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_APIKeyHTTPPreservesPreviousResponseIDWhenWSDisabled","Elapsed":0}
- {"Time":"2026-09-12T11:39:03.9807043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Dial426FallbackHTTP"}
- {"Time":"2026-09-12T11:39:03.9807043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Dial426FallbackHTTP","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2Dial426FallbackHTTP\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:03.9807043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Dial426FallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:03.980Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=12 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:03.9807043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Dial426FallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:03.980Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=12 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:03.9807043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Dial426FallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:03.980Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=12 account_type=apikey ws_host=127.0.0.1:56572 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:03.9807043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Dial426FallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:03.980Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=12 attempt=1 event=response.create payload_keys=input,model,previous_response_id,stream,type payload_bytes=140 payload_key_sizes=input:34,type:15,previous_response_id:8,model:7,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=true has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:03.9807043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Dial426FallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:03.980Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":12,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:03.9807043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Dial426FallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:03.980Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=12 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:03.9812741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Dial426FallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:03.981Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=12 account_type=apikey transport=responses_websockets_v2 reason=upgrade_required dial_status=426 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=- cause=openai ws dial fail: status=426 err=fail to WebSocket dial: expected handshake response status code 101 but got 426 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:56572 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:03.9812741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Dial426FallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:03.981Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_stop account_id=12 attempt=1 reason=upgrade_required\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:03.9812741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Dial426FallbackHTTP","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2Dial426FallbackHTTP (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:03.9812741+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Dial426FallbackHTTP","Elapsed":0}
- {"Time":"2026-09-12T11:39:03.9812741+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS"}
- {"Time":"2026-09-12T11:39:03.9812741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:03.9812741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:03.981Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=21 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:03.9812741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:03.981Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=21 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:03.9812741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:03.981Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=21 account_type=apikey ws_host=127.0.0.1:56574 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:03.9817885+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:03.981Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=21 attempt=1 event=response.create payload_keys=input,model,previous_response_id,stream,type payload_bytes=144 payload_key_sizes=input:34,type:15,previous_response_id:12,model:7,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=true has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:03.9817885+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:03.981Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":21,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:03.9817885+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:03.981Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=21 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:03.9817885+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:03.981Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=21 account_type=apikey transport=responses_websockets_v2 reason=dial_fail dial_status=404 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=- cause=openai ws dial fail: status=404 err=fail to WebSocket dial: expected handshake response status code 101 but got 404 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:56574 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:03.9817885+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:03.981Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=21 retry=1 max_retries=5 reason=dial_fail backoff_ms=120\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:04.1022793+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:04.102Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=21 account_type=apikey ws_host=127.0.0.1:56574 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:04.1022793+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:04.102Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":21,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:04.1022793+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:04.102Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=21 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=dial_fail force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:04.1022793+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:04.102Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=21 account_type=apikey transport=responses_websockets_v2 reason=dial_fail dial_status=404 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=- cause=openai ws dial fail: status=404 err=fail to WebSocket dial: expected handshake response status code 101 but got 404 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:56574 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:04.1022793+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:04.102Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=21 retry=2 max_retries=5 reason=dial_fail backoff_ms=240\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:04.3428975+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:04.342Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=21 account_type=apikey ws_host=127.0.0.1:56574 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:04.3428975+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:04.342Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":21,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:04.3428975+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:04.342Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=21 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=dial_fail force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:04.3428975+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:04.342Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=21 account_type=apikey transport=responses_websockets_v2 reason=dial_fail dial_status=404 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=- cause=openai ws dial fail: status=404 err=fail to WebSocket dial: expected handshake response status code 101 but got 404 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:56574 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:04.3428975+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:04.342Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=21 retry=3 max_retries=5 reason=dial_fail backoff_ms=480\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:04.8235262+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:04.823Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=21 account_type=apikey ws_host=127.0.0.1:56574 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:04.8235262+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:04.823Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":21,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:04.8235262+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:04.823Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=21 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=dial_fail force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:04.8235262+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:04.823Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=21 account_type=apikey transport=responses_websockets_v2 reason=dial_fail dial_status=404 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=- cause=openai ws dial fail: status=404 err=fail to WebSocket dial: expected handshake response status code 101 but got 404 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:56574 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:04.8235262+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:04.823Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=21 retry=4 max_retries=5 reason=dial_fail backoff_ms=960\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:05.7840243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:05.784Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=21 account_type=apikey ws_host=127.0.0.1:56574 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:05.7840243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:05.784Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":21,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:05.7840243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:05.784Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=21 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=dial_fail force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:05.7840243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:05.784Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=21 account_type=apikey transport=responses_websockets_v2 reason=dial_fail dial_status=404 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=- cause=openai ws dial fail: status=404 err=fail to WebSocket dial: expected handshake response status code 101 but got 404 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:56574 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:05.7840243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:05.784Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=21 retry=5 max_retries=5 reason=dial_fail backoff_ms=1920\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:07.7046906+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.704Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=21 account_type=apikey ws_host=127.0.0.1:56574 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:07.7046906+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.704Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":21,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:07.7046906+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.704Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=21 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=dial_fail force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:07.7046906+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:07.704Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=21 account_type=apikey transport=responses_websockets_v2 reason=dial_fail dial_status=404 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=- cause=openai ws dial fail: status=404 err=fail to WebSocket dial: expected handshake response status code 101 but got 404 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:56574 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:07.7046906+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:07.704Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_exhausted account_id=21 attempts=6 max_retries=5 reason=dial_fail\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:07.7046906+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS (3.72s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:07.7053218+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Elapsed":3.72}
- {"Time":"2026-09-12T11:39:07.7053218+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ReturnErrorWhenOnlyWSv1Enabled"}
- {"Time":"2026-09-12T11:39:07.7053218+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ReturnErrorWhenOnlyWSv1Enabled","Output":"=== RUN TestOpenAIGatewayService_Forward_ReturnErrorWhenOnlyWSv1Enabled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:07.7053218+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ReturnErrorWhenOnlyWSv1Enabled","Output":"--- PASS: TestOpenAIGatewayService_Forward_ReturnErrorWhenOnlyWSv1Enabled (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:07.7053218+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ReturnErrorWhenOnlyWSv1Enabled","Elapsed":0}
- {"Time":"2026-09-12T11:39:07.7053218+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewOpenAIGatewayService_InitializesOpenAIWSResolver"}
- {"Time":"2026-09-12T11:39:07.7053218+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewOpenAIGatewayService_InitializesOpenAIWSResolver","Output":"=== RUN TestNewOpenAIGatewayService_InitializesOpenAIWSResolver\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:07.7053218+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewOpenAIGatewayService_InitializesOpenAIWSResolver","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:07.705Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:07.7053218+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewOpenAIGatewayService_InitializesOpenAIWSResolver","Output":"--- PASS: TestNewOpenAIGatewayService_InitializesOpenAIWSResolver (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:07.7053218+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewOpenAIGatewayService_InitializesOpenAIWSResolver","Elapsed":0}
- {"Time":"2026-09-12T11:39:07.7053218+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackWhenResponseAlreadyWrittenReturnsWSError"}
- {"Time":"2026-09-12T11:39:07.7053218+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackWhenResponseAlreadyWrittenReturnsWSError","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2FallbackWhenResponseAlreadyWrittenReturnsWSError\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:07.7053218+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackWhenResponseAlreadyWrittenReturnsWSError","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.705Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=41 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:07.7053218+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackWhenResponseAlreadyWrittenReturnsWSError","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.705Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=41 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:07.7053218+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackWhenResponseAlreadyWrittenReturnsWSError","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.705Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=41 account_type=apikey ws_host=127.0.0.1:56578 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:07.7053218+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackWhenResponseAlreadyWrittenReturnsWSError","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:07.705Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=41 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=106 payload_key_sizes=input:34,type:15,model:7,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:07.7053218+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackWhenResponseAlreadyWrittenReturnsWSError","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.705Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":41,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:07.7053218+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackWhenResponseAlreadyWrittenReturnsWSError","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.705Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=41 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:07.7058333+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackWhenResponseAlreadyWrittenReturnsWSError","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:07.705Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=41 account_type=apikey transport=responses_websockets_v2 reason=upgrade_required dial_status=426 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=- cause=openai ws dial fail: status=426 err=fail to WebSocket dial: expected handshake response status code 101 but got 426 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:56578 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:07.7058333+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackWhenResponseAlreadyWrittenReturnsWSError","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2FallbackWhenResponseAlreadyWrittenReturnsWSError (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:07.7058333+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackWhenResponseAlreadyWrittenReturnsWSError","Elapsed":0}
- {"Time":"2026-09-12T11:39:07.7058333+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP"}
- {"Time":"2026-09-12T11:39:07.7058333+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:07.7058333+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.705Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=88 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.3-codex stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:07.7058333+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.705Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=88 account_type=apikey model=gpt-5.3-codex stream=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:07.7058333+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.705Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=88 account_type=apikey ws_host=127.0.0.1:56580 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:07.7058333+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:07.705Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=88 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=111 payload_key_sizes=input:34,type:15,model:13,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=true payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:07.7058333+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.705Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":88,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:07.7058333+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.705Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=88 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:07.7063443+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.706Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=88 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_88_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:07.7063443+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.706Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=88 conn_id=oa_ws_88_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:07.7063443+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.706Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=88 conn_id=oa_ws_88_1 stream=true payload_bytes=111 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:07.7063443+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.706Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=88 conn_id=oa_ws_88_1 idx=1 type=response.created bytes=93 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:07.7063443+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.706Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] buffer_enqueue account_id=88 conn_id=oa_ws_88_1 idx=1 event_idx=1 event_type=response.created buffer_size=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:07.7063443+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:07.706Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] read_fail account_id=88 conn_id=oa_ws_88_1 wrote_downstream=false close_status=1011(StatusInternalError) close_reason=- cause=fail to get reader: received close frame: status = StatusInternalError and reason = \\\"\\\" events=1 token_events=0 terminal_events=0 buffered_pending=1 buffered_flushed=0 first_event=response.created last_event=response.created\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:577\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/su"}
- {"Time":"2026-09-12T11:39:07.7063443+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"b2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:777\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"}
- {"Time":"2026-09-12T11:39:07.7063443+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:07.706Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=88 retry=1 max_retries=5 reason=read_event backoff_ms=120\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:07.8269554+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.826Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=88 account_type=apikey ws_host=127.0.0.1:56580 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:07.8269554+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.826Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":88,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:07.8269554+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.826Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=88 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=read_event force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:07.8281663+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.828Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=88 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_88_2 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:07.8281663+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.828Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=88 conn_id=oa_ws_88_2 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:07.8281663+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.828Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=88 conn_id=oa_ws_88_2 stream=true payload_bytes=111 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:07.8281663+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.828Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=88 conn_id=oa_ws_88_2 idx=1 type=response.created bytes=93 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:07.8281663+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.828Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] buffer_enqueue account_id=88 conn_id=oa_ws_88_2 idx=1 event_idx=1 event_type=response.created buffer_size=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:07.828687+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:07.828Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] read_fail account_id=88 conn_id=oa_ws_88_2 wrote_downstream=false close_status=1011(StatusInternalError) close_reason=- cause=fail to get reader: received close frame: status = StatusInternalError and reason = \\\"\\\" events=1 token_events=0 terminal_events=0 buffered_pending=1 buffered_flushed=0 first_event=response.created last_event=response.created\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:577\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/su"}
- {"Time":"2026-09-12T11:39:07.828687+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"b2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:777\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"}
- {"Time":"2026-09-12T11:39:07.828687+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:07.828Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=88 retry=2 max_retries=5 reason=read_event backoff_ms=240\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:08.0693777+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:08.069Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=88 account_type=apikey ws_host=127.0.0.1:56580 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:08.0693777+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:08.069Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":88,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:08.0693777+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:08.069Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=88 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=read_event force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:08.0705862+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:08.070Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=88 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_88_3 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:08.0705862+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:08.070Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=88 conn_id=oa_ws_88_3 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:08.0705862+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:08.070Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=88 conn_id=oa_ws_88_3 stream=true payload_bytes=111 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:08.0705862+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:08.070Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=88 conn_id=oa_ws_88_3 idx=1 type=response.created bytes=93 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:08.0705862+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:08.070Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] buffer_enqueue account_id=88 conn_id=oa_ws_88_3 idx=1 event_idx=1 event_type=response.created buffer_size=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:08.0711045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:08.071Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] read_fail account_id=88 conn_id=oa_ws_88_3 wrote_downstream=false close_status=1011(StatusInternalError) close_reason=- cause=fail to get reader: received close frame: status = StatusInternalError and reason = \\\"\\\" events=1 token_events=0 terminal_events=0 buffered_pending=1 buffered_flushed=0 first_event=response.created last_event=response.created\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:577\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/su"}
- {"Time":"2026-09-12T11:39:08.0711045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"b2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:777\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"}
- {"Time":"2026-09-12T11:39:08.0711045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:08.071Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=88 retry=3 max_retries=5 reason=read_event backoff_ms=480\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:08.5515344+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:08.551Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=88 account_type=apikey ws_host=127.0.0.1:56580 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:08.5515344+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:08.551Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":88,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:08.5515344+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:08.551Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=88 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=read_event force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:08.5521451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:08.552Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=88 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_88_4 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:08.5521451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:08.552Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=88 conn_id=oa_ws_88_4 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:08.5521451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:08.552Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=88 conn_id=oa_ws_88_4 stream=true payload_bytes=111 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:08.5526743+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:08.552Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=88 conn_id=oa_ws_88_4 idx=1 type=response.created bytes=93 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:08.5526743+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:08.552Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] buffer_enqueue account_id=88 conn_id=oa_ws_88_4 idx=1 event_idx=1 event_type=response.created buffer_size=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:08.5526743+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:08.552Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] read_fail account_id=88 conn_id=oa_ws_88_4 wrote_downstream=false close_status=1011(StatusInternalError) close_reason=- cause=fail to get reader: received close frame: status = StatusInternalError and reason = \\\"\\\" events=1 token_events=0 terminal_events=0 buffered_pending=1 buffered_flushed=0 first_event=response.created last_event=response.created\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:577\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/su"}
- {"Time":"2026-09-12T11:39:08.5526743+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"b2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:777\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"}
- {"Time":"2026-09-12T11:39:08.5526743+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:08.552Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=88 retry=4 max_retries=5 reason=read_event backoff_ms=960\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:09.5131019+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:09.513Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=88 account_type=apikey ws_host=127.0.0.1:56580 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:09.5131019+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:09.513Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":88,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:09.5131019+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:09.513Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=88 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=read_event force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:09.513817+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:09.513Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=88 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_88_5 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:09.513817+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:09.513Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=88 conn_id=oa_ws_88_5 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:09.513817+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:09.513Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=88 conn_id=oa_ws_88_5 stream=true payload_bytes=111 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:09.5144167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:09.513Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=88 conn_id=oa_ws_88_5 idx=1 type=response.created bytes=93 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:09.5144167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:09.514Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] buffer_enqueue account_id=88 conn_id=oa_ws_88_5 idx=1 event_idx=1 event_type=response.created buffer_size=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:09.5144167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:09.514Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] read_fail account_id=88 conn_id=oa_ws_88_5 wrote_downstream=false close_status=1011(StatusInternalError) close_reason=- cause=fail to get reader: received close frame: status = StatusInternalError and reason = \\\"\\\" events=1 token_events=0 terminal_events=0 buffered_pending=1 buffered_flushed=0 first_event=response.created last_event=response.created\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:577\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/su"}
- {"Time":"2026-09-12T11:39:09.5144167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"b2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:777\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"}
- {"Time":"2026-09-12T11:39:09.5144167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:09.514Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=88 retry=5 max_retries=5 reason=read_event backoff_ms=1920\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:11.4351075+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.435Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=88 account_type=apikey ws_host=127.0.0.1:56580 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:11.4351075+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.435Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":88,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:11.4351075+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.435Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=88 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=read_event force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:11.4361322+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.436Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=88 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_88_6 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:11.4361322+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.436Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=88 conn_id=oa_ws_88_6 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:11.4361322+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.436Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=88 conn_id=oa_ws_88_6 stream=true payload_bytes=111 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:11.4361322+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.436Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=88 conn_id=oa_ws_88_6 idx=1 type=response.created bytes=93 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:11.4361322+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.436Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] buffer_enqueue account_id=88 conn_id=oa_ws_88_6 idx=1 event_idx=1 event_type=response.created buffer_size=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:11.4366479+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:11.436Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] read_fail account_id=88 conn_id=oa_ws_88_6 wrote_downstream=false close_status=1011(StatusInternalError) close_reason=- cause=fail to get reader: received close frame: status = StatusInternalError and reason = \\\"\\\" events=1 token_events=0 terminal_events=0 buffered_pending=1 buffered_flushed=0 first_event=response.created last_event=response.created\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:577\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/su"}
- {"Time":"2026-09-12T11:39:11.4366479+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"b2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:777\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"}
- {"Time":"2026-09-12T11:39:11.4366479+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:11.436Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_exhausted account_id=88 attempts=6 max_retries=5 reason=read_event\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:11.4366479+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP (3.73s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:11.4366479+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Elapsed":3.73}
- {"Time":"2026-09-12T11:39:11.4366479+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP"}
- {"Time":"2026-09-12T11:39:11.4366479+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:11.4366479+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.436Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=89 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.3-codex stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:11.4366479+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.436Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=89 account_type=apikey model=gpt-5.3-codex stream=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:11.4366479+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.436Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=89 account_type=apikey ws_host=127.0.0.1:62062 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:11.4366479+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:11.436Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=89 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=111 payload_key_sizes=input:34,type:15,model:13,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=true payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:11.4366479+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.436Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":89,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:11.4366479+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.436Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=89 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:11.4371652+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.437Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=89 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_89_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:11.4371652+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.437Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=89 conn_id=oa_ws_89_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:11.4376834+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.437Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=89 conn_id=oa_ws_89_1 stream=true payload_bytes=111 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:11.4376834+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:11.437Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] read_fail account_id=89 conn_id=oa_ws_89_1 wrote_downstream=false close_status=1011(StatusInternalError) close_reason=- cause=fail to get reader: received close frame: status = StatusInternalError and reason = \\\"\\\" events=0 token_events=0 terminal_events=0 buffered_pending=0 buffered_flushed=0 first_event=- last_event=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:577\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/in"}
- {"Time":"2026-09-12T11:39:11.4376834+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"ternal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:859\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"}
- {"Time":"2026-09-12T11:39:11.4376834+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:11.437Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=89 retry=1 max_retries=5 reason=read_event backoff_ms=120\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:11.558079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.558Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=89 account_type=apikey ws_host=127.0.0.1:62062 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:11.558079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.558Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":89,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:11.558079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.558Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=89 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=read_event force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:11.5587324+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.558Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=89 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_89_2 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:11.5587324+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.558Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=89 conn_id=oa_ws_89_2 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:11.5587324+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.558Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=89 conn_id=oa_ws_89_2 stream=true payload_bytes=111 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:11.5592712+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:11.559Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] read_fail account_id=89 conn_id=oa_ws_89_2 wrote_downstream=false close_status=1011(StatusInternalError) close_reason=- cause=fail to get reader: received close frame: status = StatusInternalError and reason = \\\"\\\" events=0 token_events=0 terminal_events=0 buffered_pending=0 buffered_flushed=0 first_event=- last_event=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:577\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/in"}
- {"Time":"2026-09-12T11:39:11.5592712+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"ternal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:859\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"}
- {"Time":"2026-09-12T11:39:11.5592712+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:11.559Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=89 retry=2 max_retries=5 reason=read_event backoff_ms=240\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:11.7999255+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.799Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=89 account_type=apikey ws_host=127.0.0.1:62062 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:11.7999255+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.799Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":89,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:11.7999255+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.799Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=89 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=read_event force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:11.8007185+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.800Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=89 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_89_3 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:11.8012442+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.800Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=89 conn_id=oa_ws_89_3 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:11.8012442+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.801Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=89 conn_id=oa_ws_89_3 stream=true payload_bytes=111 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:11.8012442+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:11.801Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] read_fail account_id=89 conn_id=oa_ws_89_3 wrote_downstream=false close_status=1011(StatusInternalError) close_reason=- cause=fail to get reader: received close frame: status = StatusInternalError and reason = \\\"\\\" events=0 token_events=0 terminal_events=0 buffered_pending=0 buffered_flushed=0 first_event=- last_event=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:577\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/in"}
- {"Time":"2026-09-12T11:39:11.8012442+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"ternal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:859\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"}
- {"Time":"2026-09-12T11:39:11.8017706+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:11.801Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=89 retry=3 max_retries=5 reason=read_event backoff_ms=480\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:12.281759+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:12.281Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=89 account_type=apikey ws_host=127.0.0.1:62062 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:12.281759+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:12.281Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":89,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:12.281759+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:12.281Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=89 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=read_event force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:12.2823636+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:12.282Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=89 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_89_4 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:12.2823636+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:12.282Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=89 conn_id=oa_ws_89_4 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:12.2823636+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:12.282Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=89 conn_id=oa_ws_89_4 stream=true payload_bytes=111 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:12.2828857+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:12.282Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] read_fail account_id=89 conn_id=oa_ws_89_4 wrote_downstream=false close_status=1011(StatusInternalError) close_reason=- cause=fail to get reader: received close frame: status = StatusInternalError and reason = \\\"\\\" events=0 token_events=0 terminal_events=0 buffered_pending=0 buffered_flushed=0 first_event=- last_event=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:577\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/in"}
- {"Time":"2026-09-12T11:39:12.2828857+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"ternal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:859\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"}
- {"Time":"2026-09-12T11:39:12.2828857+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:12.282Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=89 retry=4 max_retries=5 reason=read_event backoff_ms=960\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:13.2431827+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:13.243Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=89 account_type=apikey ws_host=127.0.0.1:62062 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:13.2431827+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:13.243Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":89,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:13.2431827+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:13.243Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=89 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=read_event force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:13.2437603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:13.243Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=89 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_89_5 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:13.2437603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:13.243Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=89 conn_id=oa_ws_89_5 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:13.2437603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:13.243Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=89 conn_id=oa_ws_89_5 stream=true payload_bytes=111 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:13.2437603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:13.243Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] read_fail account_id=89 conn_id=oa_ws_89_5 wrote_downstream=false close_status=1011(StatusInternalError) close_reason=- cause=fail to get reader: received close frame: status = StatusInternalError and reason = \\\"\\\" events=0 token_events=0 terminal_events=0 buffered_pending=0 buffered_flushed=0 first_event=- last_event=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:577\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/in"}
- {"Time":"2026-09-12T11:39:13.2437603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"ternal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:859\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"}
- {"Time":"2026-09-12T11:39:13.2437603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:13.243Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=89 retry=5 max_retries=5 reason=read_event backoff_ms=1920\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:15.1643685+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.164Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=89 account_type=apikey ws_host=127.0.0.1:62062 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:15.1643685+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.164Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":89,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:15.1643685+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.164Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=89 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=read_event force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:15.1648745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.164Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=89 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_89_6 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:15.1648745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.164Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=89 conn_id=oa_ws_89_6 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:15.1648745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.164Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=89 conn_id=oa_ws_89_6 stream=true payload_bytes=111 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:15.1654913+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:15.165Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] read_fail account_id=89 conn_id=oa_ws_89_6 wrote_downstream=false close_status=1011(StatusInternalError) close_reason=- cause=fail to get reader: received close frame: status = StatusInternalError and reason = \\\"\\\" events=0 token_events=0 terminal_events=0 buffered_pending=0 buffered_flushed=0 first_event=- last_event=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:577\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/in"}
- {"Time":"2026-09-12T11:39:15.1654913+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"ternal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:859\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"}
- {"Time":"2026-09-12T11:39:15.1654913+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:15.165Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_exhausted account_id=89 attempts=6 max_retries=5 reason=read_event\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:15.1654913+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP (3.73s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:15.1654913+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Elapsed":3.73}
- {"Time":"2026-09-12T11:39:15.1654913+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PolicyViolationFastFallbackHTTP"}
- {"Time":"2026-09-12T11:39:15.1654913+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PolicyViolationFastFallbackHTTP","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2PolicyViolationFastFallbackHTTP\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:15.1654913+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PolicyViolationFastFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.165Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=8901 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.3-codex stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:15.1654913+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PolicyViolationFastFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.165Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=8901 account_type=apikey model=gpt-5.3-codex stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:15.1654913+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PolicyViolationFastFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.165Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=8901 account_type=apikey ws_host=127.0.0.1:62070 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:15.1654913+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PolicyViolationFastFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:15.165Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=8901 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=112 payload_key_sizes=input:34,type:15,model:13,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:15.1654913+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PolicyViolationFastFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.165Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":8901,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:15.1654913+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PolicyViolationFastFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.165Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=8901 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:15.1661173+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PolicyViolationFastFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.166Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=8901 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_8901_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:15.1661173+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PolicyViolationFastFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.166Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=8901 conn_id=oa_ws_8901_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:15.1661173+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PolicyViolationFastFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.166Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=8901 conn_id=oa_ws_8901_1 stream=false payload_bytes=112 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:15.1661173+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PolicyViolationFastFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:15.166Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] read_fail account_id=8901 conn_id=oa_ws_8901_1 wrote_downstream=false close_status=1008(StatusPolicyViolation) close_reason=- cause=fail to get reader: received close frame: status = StatusPolicyViolation and reason = \\\"\\\" events=0 token_events=0 terminal_events=0 buffered_pending=0 buffered_flushed=0 first_event=- last_event=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:15.1661173+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PolicyViolationFastFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:15.166Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_stop account_id=8901 attempt=1 reason=policy_violation\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:15.1661173+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PolicyViolationFastFallbackHTTP","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2PolicyViolationFastFallbackHTTP (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:15.1661173+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PolicyViolationFastFallbackHTTP","Elapsed":0}
- {"Time":"2026-09-12T11:39:15.1661173+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP"}
- {"Time":"2026-09-12T11:39:15.1661173+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:15.1666258+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.166Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=90 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.3-codex stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:15.1666258+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.166Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=90 account_type=apikey model=gpt-5.3-codex stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:15.1666258+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.166Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=90 account_type=apikey ws_host=127.0.0.1:62072 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:15.1666258+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:15.166Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=90 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=112 payload_key_sizes=input:34,type:15,model:13,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:15.1666258+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.166Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":90,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:15.1666258+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.166Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=90 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:15.1666258+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.166Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=90 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_90_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:15.1666258+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.166Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=90 conn_id=oa_ws_90_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:15.1666258+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.166Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=90 conn_id=oa_ws_90_1 stream=false payload_bytes=112 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:15.1666258+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.166Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=90 conn_id=oa_ws_90_1 idx=1 type=err bytes=140 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:15.1671362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:15.167Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] error_event account_id=90 conn_id=oa_ws_90_1 idx=1 fallback_reason=ws_connection_limit_reached can_fallback=true err_code=websocket_connection_limit_reached err_type=server_err err_message=websocket connection limit reached\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:680\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpe"}
- {"Time":"2026-09-12T11:39:15.1671362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"nAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:1024\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"}
- {"Time":"2026-09-12T11:39:15.1671362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:15.167Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=90 retry=1 max_retries=5 reason=ws_connection_limit_reached backoff_ms=120\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:15.2877029+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.287Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=90 account_type=apikey ws_host=127.0.0.1:62072 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:15.2877029+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.287Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":90,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:15.2877029+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.287Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=90 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=ws_connection_limit_reached force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:15.2883234+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.288Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=90 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_90_2 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:15.2883234+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.288Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=90 conn_id=oa_ws_90_2 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:15.2883234+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.288Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=90 conn_id=oa_ws_90_2 stream=false payload_bytes=112 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:15.2883234+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.288Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=90 conn_id=oa_ws_90_2 idx=1 type=err bytes=140 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:15.2883234+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:15.288Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] error_event account_id=90 conn_id=oa_ws_90_2 idx=1 fallback_reason=ws_connection_limit_reached can_fallback=true err_code=websocket_connection_limit_reached err_type=server_err err_message=websocket connection limit reached\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:680\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpe"}
- {"Time":"2026-09-12T11:39:15.2883234+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"nAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:1024\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"}
- {"Time":"2026-09-12T11:39:15.2888396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:15.288Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=90 retry=2 max_retries=5 reason=ws_connection_limit_reached backoff_ms=240\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:15.5293302+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.529Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=90 account_type=apikey ws_host=127.0.0.1:62072 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:15.5293302+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.529Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":90,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:15.5293302+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.529Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=90 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=ws_connection_limit_reached force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:15.529968+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.529Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=90 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_90_3 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:15.529968+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.529Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=90 conn_id=oa_ws_90_3 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:15.529968+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.529Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=90 conn_id=oa_ws_90_3 stream=false payload_bytes=112 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:15.5304871+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.530Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=90 conn_id=oa_ws_90_3 idx=1 type=err bytes=140 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:15.5304871+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:15.530Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] error_event account_id=90 conn_id=oa_ws_90_3 idx=1 fallback_reason=ws_connection_limit_reached can_fallback=true err_code=websocket_connection_limit_reached err_type=server_err err_message=websocket connection limit reached\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:680\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpe"}
- {"Time":"2026-09-12T11:39:15.5304871+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"nAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:1024\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"}
- {"Time":"2026-09-12T11:39:15.5304871+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:15.530Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=90 retry=3 max_retries=5 reason=ws_connection_limit_reached backoff_ms=480\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:16.0109005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:16.010Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=90 account_type=apikey ws_host=127.0.0.1:62072 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:16.0109005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:16.010Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":90,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:16.0109005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:16.010Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=90 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=ws_connection_limit_reached force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:16.0114053+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:16.011Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=90 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_90_4 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:16.0114053+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:16.011Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=90 conn_id=oa_ws_90_4 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:16.0114053+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:16.011Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=90 conn_id=oa_ws_90_4 stream=false payload_bytes=112 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:16.0119193+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:16.011Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=90 conn_id=oa_ws_90_4 idx=1 type=err bytes=140 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:16.0119193+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:16.011Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] error_event account_id=90 conn_id=oa_ws_90_4 idx=1 fallback_reason=ws_connection_limit_reached can_fallback=true err_code=websocket_connection_limit_reached err_type=server_err err_message=websocket connection limit reached\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:680\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpe"}
- {"Time":"2026-09-12T11:39:16.0119193+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"nAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:1024\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"}
- {"Time":"2026-09-12T11:39:16.0119193+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:16.011Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=90 retry=4 max_retries=5 reason=ws_connection_limit_reached backoff_ms=960\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:16.9723822+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:16.972Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=90 account_type=apikey ws_host=127.0.0.1:62072 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:16.9723822+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:16.972Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":90,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:16.9723822+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:16.972Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=90 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=ws_connection_limit_reached force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:16.972965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:16.972Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=90 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_90_5 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:16.972965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:16.972Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=90 conn_id=oa_ws_90_5 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:16.972965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:16.972Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=90 conn_id=oa_ws_90_5 stream=false payload_bytes=112 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:16.972965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:16.972Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=90 conn_id=oa_ws_90_5 idx=1 type=err bytes=140 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:16.9741572+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:16.972Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] error_event account_id=90 conn_id=oa_ws_90_5 idx=1 fallback_reason=ws_connection_limit_reached can_fallback=true err_code=websocket_connection_limit_reached err_type=server_err err_message=websocket connection limit reached\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:680\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpe"}
- {"Time":"2026-09-12T11:39:16.9741572+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"nAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:1024\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"}
- {"Time":"2026-09-12T11:39:16.9741572+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:16.974Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=90 retry=5 max_retries=5 reason=ws_connection_limit_reached backoff_ms=1920\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8944234+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.894Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=90 account_type=apikey ws_host=127.0.0.1:62072 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8944234+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.894Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":90,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:18.8944234+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.894Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=90 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=ws_connection_limit_reached force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8951457+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.895Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=90 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_90_6 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8951457+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.895Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=90 conn_id=oa_ws_90_6 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8951457+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.895Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=90 conn_id=oa_ws_90_6 stream=false payload_bytes=112 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8951457+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.895Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=90 conn_id=oa_ws_90_6 idx=1 type=err bytes=140 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8951457+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:18.895Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] error_event account_id=90 conn_id=oa_ws_90_6 idx=1 fallback_reason=ws_connection_limit_reached can_fallback=true err_code=websocket_connection_limit_reached err_type=server_err err_message=websocket connection limit reached\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:680\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpe"}
- {"Time":"2026-09-12T11:39:18.8951457+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"nAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:1024\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"}
- {"Time":"2026-09-12T11:39:18.8956578+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.895Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_exhausted account_id=90 attempts=6 max_retries=5 reason=ws_connection_limit_reached\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8956578+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP (3.73s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.8956578+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Elapsed":3.73}
- {"Time":"2026-09-12T11:39:18.8956578+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID"}
- {"Time":"2026-09-12T11:39:18.8956578+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.8956578+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.895Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=91 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.3-codex stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8956578+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.895Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=91 account_type=apikey model=gpt-5.3-codex stream=false has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8956578+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.895Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=91 account_type=apikey ws_host=127.0.0.1:50569 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8956578+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.895Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=91 attempt=1 event=response.create payload_keys=input,model,previous_response_id,stream,type payload_bytes=155 payload_key_sizes=input:34,previous_response_id:17,type:15,model:13,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=true has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8956578+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.895Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":91,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:18.8956578+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.895Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=91 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8961779+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.896Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=91 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_91_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8961779+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.896Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] continuation_probe account_id=91 account_type=apikey conn_id=oa_ws_91_1 previous_response_id=resp_prev_missing previous_response_id_kind=response_id preferred_conn_id=- conn_reused=false store_disabled=false session_hash=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_turn_state=false turn_state_len=0 has_prompt_cache_key=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8961779+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.896Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=91 conn_id=oa_ws_91_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8961779+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.896Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=91 conn_id=oa_ws_91_1 stream=false payload_bytes=155 previous_response_id=resp_prev_missing\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8966897+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.896Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=91 conn_id=oa_ws_91_1 idx=1 type=err bytes=135 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8966897+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:18.896Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] error_event account_id=91 conn_id=oa_ws_91_1 idx=1 fallback_reason=previous_response_not_found can_fallback=true err_code=previous_response_not_found err_type=invalid_request_err err_message=previous response not found\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:680\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGa"}
- {"Time":"2026-09-12T11:39:18.8966897+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"tewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:1131\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"}
- {"Time":"2026-09-12T11:39:18.8966897+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.896Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] previous_response_not_found_diag account_id=91 account_type=apikey conn_id=oa_ws_91_1 previous_response_id=resp_prev_missing previous_response_id_kind=response_id response_id=- event_idx=1 req_stream=false store_disabled=false conn_reused=false session_hash=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_turn_state=false turn_state_len=0 has_prompt_cache_key=false err_code=previous_response_not_found err_type=invalid_request_err err_message=previous response not found\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8966897+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.896Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_prev_response_recovery account_id=91 attempt=1 action=drop_previous_response_id retry=1 previous_response_id=resp_prev_missing previous_response_id_kind=response_id\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8966897+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.896Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=91 account_type=apikey ws_host=127.0.0.1:50569 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8966897+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.896Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":91,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:18.8966897+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.896Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=91 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=previous_response_not_found force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8972143+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.897Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=91 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_91_2 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8972143+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.897Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=91 conn_id=oa_ws_91_2 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8972143+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.897Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=91 conn_id=oa_ws_91_2 stream=false payload_bytes=112 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8972143+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.897Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=91 conn_id=oa_ws_91_2 idx=1 type=response.completed bytes=186 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8977276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.897Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=91 conn_id=oa_ws_91_2 response_id=resp_ws_prev_recover_ok stream=false duration_ms=1 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8977276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.897Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=91 request_id=resp_ws_prev_recover_ok stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=2\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8977276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.8977276+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Elapsed":0}
- {"Time":"2026-09-12T11:39:18.8977276+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput"}
- {"Time":"2026-09-12T11:39:18.8977276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.8977276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.897Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=92 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.3-codex stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8977276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.897Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=92 account_type=apikey model=gpt-5.3-codex stream=false has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8977276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.897Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=92 account_type=apikey ws_host=127.0.0.1:50572 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8977276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.897Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=92 attempt=1 event=response.create payload_keys=input,model,previous_response_id,stream,type payload_bytes=183 payload_key_sizes=input:59,previous_response_id:17,type:15,model:13,stream:1 input_summary=items=1,text_chars=0,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=true has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8977276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.897Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":92,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:18.8977276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.897Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=92 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8982587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.898Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=92 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_92_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8982587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.898Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] continuation_probe account_id=92 account_type=apikey conn_id=oa_ws_92_1 previous_response_id=resp_prev_missing previous_response_id_kind=response_id preferred_conn_id=- conn_reused=false store_disabled=false session_hash=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_turn_state=false turn_state_len=0 has_prompt_cache_key=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8982587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.898Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=92 conn_id=oa_ws_92_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8982587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.898Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=92 conn_id=oa_ws_92_1 stream=false payload_bytes=183 previous_response_id=resp_prev_missing\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8982587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.898Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=92 conn_id=oa_ws_92_1 idx=1 type=err bytes=135 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8982587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:18.898Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] error_event account_id=92 conn_id=oa_ws_92_1 idx=1 fallback_reason=previous_response_not_found can_fallback=true err_code=previous_response_not_found err_type=invalid_request_err err_message=previous response not found\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:680\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGa"}
- {"Time":"2026-09-12T11:39:18.8982587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput","Output":"tewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:1231\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"}
- {"Time":"2026-09-12T11:39:18.8982587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.898Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] previous_response_not_found_diag account_id=92 account_type=apikey conn_id=oa_ws_92_1 previous_response_id=resp_prev_missing previous_response_id_kind=response_id response_id=- event_idx=1 req_stream=false store_disabled=false conn_reused=false session_hash=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_turn_state=false turn_state_len=0 has_prompt_cache_key=false err_code=previous_response_not_found err_type=invalid_request_err err_message=previous response not found\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8982587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.898Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_prev_response_recovery_skip account_id=92 attempt=1 reason=has_function_call_output previous_response_id_present=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8982587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.898Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_stop account_id=92 attempt=1 reason=previous_response_not_found\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8982587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.8987704+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput","Elapsed":0}
- {"Time":"2026-09-12T11:39:18.8987704+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID"}
- {"Time":"2026-09-12T11:39:18.8987704+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.8987704+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.898Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=93 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.3-codex stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8987704+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.898Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=93 account_type=apikey model=gpt-5.3-codex stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8987704+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.898Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=93 account_type=apikey ws_host=127.0.0.1:50574 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8987704+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.898Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=93 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=112 payload_key_sizes=input:34,type:15,model:13,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8987704+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.898Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":93,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:18.8987704+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.898Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=93 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8987704+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.898Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=93 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_93_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8992856+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.898Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=93 conn_id=oa_ws_93_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8992856+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.899Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=93 conn_id=oa_ws_93_1 stream=false payload_bytes=112 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8992856+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.899Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=93 conn_id=oa_ws_93_1 idx=1 type=err bytes=135 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8992856+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:18.899Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] error_event account_id=93 conn_id=oa_ws_93_1 idx=1 fallback_reason=previous_response_not_found can_fallback=true err_code=previous_response_not_found err_type=invalid_request_err err_message=previous response not found\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:680\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGa"}
- {"Time":"2026-09-12T11:39:18.8992856+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID","Output":"tewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:1329\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"}
- {"Time":"2026-09-12T11:39:18.8992856+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.899Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] previous_response_not_found_diag account_id=93 account_type=apikey conn_id=oa_ws_93_1 previous_response_id=- previous_response_id_kind=empty response_id=- event_idx=1 req_stream=false store_disabled=false conn_reused=false session_hash=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_turn_state=false turn_state_len=0 has_prompt_cache_key=false err_code=previous_response_not_found err_type=invalid_request_err err_message=previous response not found\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8992856+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.899Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_prev_response_recovery_skip account_id=93 attempt=1 reason=missing_previous_response_id previous_response_id_present=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8992856+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.899Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_stop account_id=93 attempt=1 reason=previous_response_not_found\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8992856+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.8992856+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID","Elapsed":0}
- {"Time":"2026-09-12T11:39:18.8992856+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce"}
- {"Time":"2026-09-12T11:39:18.8992856+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.8992856+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.899Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=94 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.3-codex stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8997979+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.899Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=94 account_type=apikey model=gpt-5.3-codex stream=false has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8997979+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.899Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=94 account_type=apikey ws_host=127.0.0.1:50576 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8997979+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.899Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=94 attempt=1 event=response.create payload_keys=input,model,previous_response_id,stream,type payload_bytes=155 payload_key_sizes=input:34,previous_response_id:17,type:15,model:13,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=true has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8997979+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.899Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":94,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:18.8997979+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.899Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=94 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8997979+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.899Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=94 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_94_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8997979+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.899Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] continuation_probe account_id=94 account_type=apikey conn_id=oa_ws_94_1 previous_response_id=resp_prev_missing previous_response_id_kind=response_id preferred_conn_id=- conn_reused=false store_disabled=false session_hash=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_turn_state=false turn_state_len=0 has_prompt_cache_key=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8997979+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.899Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=94 conn_id=oa_ws_94_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8997979+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.899Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=94 conn_id=oa_ws_94_1 stream=false payload_bytes=155 previous_response_id=resp_prev_missing\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8997979+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.899Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=94 conn_id=oa_ws_94_1 idx=1 type=err bytes=135 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.8997979+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:18.899Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] error_event account_id=94 conn_id=oa_ws_94_1 idx=1 fallback_reason=previous_response_not_found can_fallback=true err_code=previous_response_not_found err_type=invalid_request_err err_message=previous response not found\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:680\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGa"}
- {"Time":"2026-09-12T11:39:18.8997979+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"tewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:1426\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"}
- {"Time":"2026-09-12T11:39:18.8997979+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.899Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] previous_response_not_found_diag account_id=94 account_type=apikey conn_id=oa_ws_94_1 previous_response_id=resp_prev_missing previous_response_id_kind=response_id response_id=- event_idx=1 req_stream=false store_disabled=false conn_reused=false session_hash=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_turn_state=false turn_state_len=0 has_prompt_cache_key=false err_code=previous_response_not_found err_type=invalid_request_err err_message=previous response not found\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9003125+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.900Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_prev_response_recovery account_id=94 attempt=1 action=drop_previous_response_id retry=1 previous_response_id=resp_prev_missing previous_response_id_kind=response_id\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9003125+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.900Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=94 account_type=apikey ws_host=127.0.0.1:50576 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9003125+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.900Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":94,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:18.9003125+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.900Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=94 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=previous_response_not_found force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9003125+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.900Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=94 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_94_2 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9003125+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.900Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=94 conn_id=oa_ws_94_2 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9003125+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.900Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=94 conn_id=oa_ws_94_2 stream=false payload_bytes=112 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9003125+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.900Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=94 conn_id=oa_ws_94_2 idx=1 type=err bytes=135 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9003125+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:18.900Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] error_event account_id=94 conn_id=oa_ws_94_2 idx=1 fallback_reason=previous_response_not_found can_fallback=true err_code=previous_response_not_found err_type=invalid_request_err err_message=previous response not found\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:680\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGa"}
- {"Time":"2026-09-12T11:39:18.9003125+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"tewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:1426\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"}
- {"Time":"2026-09-12T11:39:18.9003125+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.900Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] previous_response_not_found_diag account_id=94 account_type=apikey conn_id=oa_ws_94_2 previous_response_id=- previous_response_id_kind=empty response_id=- event_idx=1 req_stream=false store_disabled=false conn_reused=false session_hash=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_turn_state=false turn_state_len=0 has_prompt_cache_key=false err_code=previous_response_not_found err_type=invalid_request_err err_message=previous response not found\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9008224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.900Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_stop account_id=94 attempt=2 reason=previous_response_not_found\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9008224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9008224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Elapsed":0}
- {"Time":"2026-09-12T11:39:18.9008224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce"}
- {"Time":"2026-09-12T11:39:18.9008224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9008224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.900Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=95 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.3-codex stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9008224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.900Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=95 account_type=apikey model=gpt-5.3-codex stream=false has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9008224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.900Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=95 account_type=apikey ws_host=127.0.0.1:50579 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9008224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.900Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=95 attempt=1 event=response.create payload_keys=input,model,previous_response_id,stream,type payload_bytes=254 payload_key_sizes=input:121,previous_response_id:19,type:15,model:13,stream:1 input_summary=items=3,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=true has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9008224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.900Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":95,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:18.9008224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.900Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=95 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9013357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.900Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=95 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_95_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9013357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] continuation_probe account_id=95 account_type=apikey conn_id=oa_ws_95_1 previous_response_id=resp_prev_encrypted previous_response_id_kind=response_id preferred_conn_id=- conn_reused=false store_disabled=false session_hash=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_turn_state=false turn_state_len=0 has_prompt_cache_key=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9013357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=95 conn_id=oa_ws_95_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9013357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=95 conn_id=oa_ws_95_1 stream=false payload_bytes=254 previous_response_id=resp_prev_encrypted\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9013357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=95 conn_id=oa_ws_95_1 idx=1 type=err bytes=150 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9013357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] error_event account_id=95 conn_id=oa_ws_95_1 idx=1 fallback_reason=invalid_encrypted_content can_fallback=true err_code=invalid_encrypted_content err_type=invalid_request_err err_message=The encrypted content could not be verified.\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:680\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service"}
- {"Time":"2026-09-12T11:39:18.9013357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":".TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:1541\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"}
- {"Time":"2026-09-12T11:39:18.9013357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_invalid_encrypted_content_recovery account_id=95 attempt=1 action=drop_encrypted_reasoning_items retry=1 previous_response_id_present=true previous_response_id=resp_prev_encrypted previous_response_id_kind=response_id has_function_call_output=false dropped_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9013357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=95 account_type=apikey ws_host=127.0.0.1:50579 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9013357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":95,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:18.9013357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=95 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=invalid_encrypted_content force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9013357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=95 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_95_2 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9013357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=95 conn_id=oa_ws_95_2 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9013357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=95 conn_id=oa_ws_95_2 stream=false payload_bytes=112 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9018449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=95 conn_id=oa_ws_95_2 idx=1 type=response.completed bytes=207 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9018449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=95 conn_id=oa_ws_95_2 response_id=resp_ws_invalid_encrypted_content_recover_ok stream=false duration_ms=1 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9018449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=95 request_id=resp_ws_invalid_encrypted_content_recover_ok stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=2\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9018449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9018449+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Elapsed":0}
- {"Time":"2026-09-12T11:39:18.9018449+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem"}
- {"Time":"2026-09-12T11:39:18.9018449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9018449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=96 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.3-codex stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9018449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=96 account_type=apikey model=gpt-5.3-codex stream=false has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9018449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=96 account_type=apikey ws_host=127.0.0.1:50582 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9018449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=96 attempt=1 event=response.create payload_keys=input,model,previous_response_id,stream,type payload_bytes=157 payload_key_sizes=input:34,previous_response_id:19,type:15,model:13,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=true has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9018449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":96,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:18.9018449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=96 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9018449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=96 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_96_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9023554+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] continuation_probe account_id=96 account_type=apikey conn_id=oa_ws_96_1 previous_response_id=resp_prev_encrypted previous_response_id_kind=response_id preferred_conn_id=- conn_reused=false store_disabled=false session_hash=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_turn_state=false turn_state_len=0 has_prompt_cache_key=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9023554+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=96 conn_id=oa_ws_96_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9023554+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=96 conn_id=oa_ws_96_1 stream=false payload_bytes=157 previous_response_id=resp_prev_encrypted\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9023554+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=96 conn_id=oa_ws_96_1 idx=1 type=err bytes=150 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9023554+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] error_event account_id=96 conn_id=oa_ws_96_1 idx=1 fallback_reason=invalid_encrypted_content can_fallback=true err_code=invalid_encrypted_content err_type=invalid_request_err err_message=The encrypted content could not be verified.\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:680\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service"}
- {"Time":"2026-09-12T11:39:18.9023554+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem","Output":".TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:1645\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"}
- {"Time":"2026-09-12T11:39:18.9023554+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_invalid_encrypted_content_recovery_skip account_id=96 attempt=1 reason=missing_encrypted_reasoning_items\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9023554+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_stop account_id=96 attempt=1 reason=invalid_encrypted_content\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9023554+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9023554+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem","Elapsed":0}
- {"Time":"2026-09-12T11:39:18.9023554+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary"}
- {"Time":"2026-09-12T11:39:18.9023554+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9023554+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=97 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.3-codex stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9023554+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=97 account_type=apikey model=gpt-5.3-codex stream=false has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9023554+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=97 account_type=apikey ws_host=127.0.0.1:50584 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9023554+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=97 attempt=1 event=response.create payload_keys=input,model,previous_response_id,stream,type payload_bytes=219 payload_key_sizes=previous_response_id:19,type:15,model:13,stream:1,input:-1 input_summary=- stream=false payload_strategy=full removed_keys=- has_previous_response_id=true has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9023554+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":97,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:18.9023554+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=97 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9028634+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=97 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_97_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9028634+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] continuation_probe account_id=97 account_type=apikey conn_id=oa_ws_97_1 previous_response_id=resp_prev_encrypted previous_response_id_kind=response_id preferred_conn_id=- conn_reused=false store_disabled=false session_hash=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_turn_state=false turn_state_len=0 has_prompt_cache_key=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9028634+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=97 conn_id=oa_ws_97_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9028634+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=97 conn_id=oa_ws_97_1 stream=false payload_bytes=219 previous_response_id=resp_prev_encrypted\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9028634+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=97 conn_id=oa_ws_97_1 idx=1 type=err bytes=150 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9028634+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] error_event account_id=97 conn_id=oa_ws_97_1 idx=1 fallback_reason=invalid_encrypted_content can_fallback=true err_code=invalid_encrypted_content err_type=invalid_request_err err_message=The encrypted content could not be verified.\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:680\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service"}
- {"Time":"2026-09-12T11:39:18.9028634+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":".TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:1761\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"}
- {"Time":"2026-09-12T11:39:18.9028634+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_invalid_encrypted_content_recovery account_id=97 attempt=1 action=drop_encrypted_reasoning_items retry=1 previous_response_id_present=true previous_response_id=resp_prev_encrypted previous_response_id_kind=response_id has_function_call_output=false dropped_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9028634+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=97 account_type=apikey ws_host=127.0.0.1:50584 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9028634+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":97,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:18.9028634+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=97 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=invalid_encrypted_content force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9033733+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=97 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_97_2 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9033733+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=97 conn_id=oa_ws_97_2 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9033733+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=97 conn_id=oa_ws_97_2 stream=false payload_bytes=147 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9033733+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=97 conn_id=oa_ws_97_2 idx=1 type=response.completed bytes=206 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9033733+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=97 conn_id=oa_ws_97_2 response_id=resp_ws_invalid_encrypted_content_object_ok stream=false duration_ms=1 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9033733+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=97 request_id=resp_ws_invalid_encrypted_content_object_ok stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=2\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9033733+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9033733+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Elapsed":0}
- {"Time":"2026-09-12T11:39:18.9033733+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput"}
- {"Time":"2026-09-12T11:39:18.9033733+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9033733+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=98 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.3-codex stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9033733+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=98 account_type=apikey model=gpt-5.3-codex stream=false has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9033733+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=98 account_type=apikey ws_host=127.0.0.1:50587 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9033733+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=98 attempt=1 event=response.create payload_keys=input,model,previous_response_id,stream,type payload_bytes=239 payload_key_sizes=input:104,previous_response_id:23,type:15,model:13,stream:1 input_summary=items=2,text_chars=0,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=true has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9033733+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":98,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:18.9033733+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=98 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9038793+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=98 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_98_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9038793+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] continuation_probe account_id=98 account_type=apikey conn_id=oa_ws_98_1 previous_response_id=resp_prev_function_call previous_response_id_kind=response_id preferred_conn_id=- conn_reused=false store_disabled=false session_hash=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_turn_state=false turn_state_len=0 has_prompt_cache_key=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9038793+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=98 conn_id=oa_ws_98_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9038793+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=98 conn_id=oa_ws_98_1 stream=false payload_bytes=239 previous_response_id=resp_prev_function_call\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9038793+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=98 conn_id=oa_ws_98_1 idx=1 type=err bytes=150 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9038793+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] error_event account_id=98 conn_id=oa_ws_98_1 idx=1 fallback_reason=invalid_encrypted_content can_fallback=true err_code=invalid_encrypted_content err_type=invalid_request_err err_message=The encrypted content could not be verified.\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:680\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service"}
- {"Time":"2026-09-12T11:39:18.9038793+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":".TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:1879\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"}
- {"Time":"2026-09-12T11:39:18.9038793+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_invalid_encrypted_content_recovery account_id=98 attempt=1 action=drop_encrypted_reasoning_items retry=1 previous_response_id_present=true previous_response_id=resp_prev_function_call previous_response_id_kind=response_id has_function_call_output=true dropped_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9038793+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=98 account_type=apikey ws_host=127.0.0.1:50587 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9044016+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":98,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:18.9044016+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.904Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=98 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=invalid_encrypted_content force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9044016+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.904Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=98 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_98_2 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9044016+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.904Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] continuation_probe account_id=98 account_type=apikey conn_id=oa_ws_98_2 previous_response_id=resp_prev_function_call previous_response_id_kind=response_id preferred_conn_id=- conn_reused=false store_disabled=false session_hash=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_turn_state=false turn_state_len=0 has_prompt_cache_key=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9044016+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.904Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=98 conn_id=oa_ws_98_2 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9044016+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.904Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=98 conn_id=oa_ws_98_2 stream=false payload_bytes=191 previous_response_id=resp_prev_function_call\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9044016+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.904Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=98 conn_id=oa_ws_98_2 idx=1 type=response.completed bytes=220 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9044016+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.904Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=98 conn_id=oa_ws_98_2 response_id=resp_ws_invalid_encrypted_content_function_call_output_ok stream=false duration_ms=1 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9044016+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.904Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=98 request_id=resp_ws_invalid_encrypted_content_function_call_output_ok stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=2\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9044016+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9044016+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Elapsed":0}
- {"Time":"2026-09-12T11:39:18.9044016+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve"}
- {"Time":"2026-09-12T11:39:18.9044016+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9044016+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/v2优先"}
- {"Time":"2026-09-12T11:39:18.9044016+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/v2优先","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve/v2优先\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/v2优先","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve/v2优先 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/v2优先","Elapsed":0}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/OpenAI_setup_token复用OAuth开关"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/OpenAI_setup_token复用OAuth开关","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve/OpenAI_setup_token复用OAuth开关\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/OpenAI_setup_token复用OAuth开关","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve/OpenAI_setup_token复用OAuth开关 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/OpenAI_setup_token复用OAuth开关","Elapsed":0}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/非OpenAI_setup_token不进入OAuth_WS"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/非OpenAI_setup_token不进入OAuth_WS","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve/非OpenAI_setup_token不进入OAuth_WS\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/非OpenAI_setup_token不进入OAuth_WS","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve/非OpenAI_setup_token不进入OAuth_WS (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/非OpenAI_setup_token不进入OAuth_WS","Elapsed":0}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/v2关闭时回退v1"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/v2关闭时回退v1","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve/v2关闭时回退v1\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/v2关闭时回退v1","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve/v2关闭时回退v1 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/v2关闭时回退v1","Elapsed":0}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/透传开关不影响WS协议判定"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/透传开关不影响WS协议判定","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve/透传开关不影响WS协议判定\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/透传开关不影响WS协议判定","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve/透传开关不影响WS协议判定 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/透传开关不影响WS协议判定","Elapsed":0}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/账号级强制HTTP"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/账号级强制HTTP","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve/账号级强制HTTP\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/账号级强制HTTP","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve/账号级强制HTTP (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/账号级强制HTTP","Elapsed":0}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/全局强制HTTP无需启用mode_router"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/全局强制HTTP无需启用mode_router","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve/全局强制HTTP无需启用mode_router\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/全局强制HTTP无需启用mode_router","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve/全局强制HTTP无需启用mode_router (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/全局强制HTTP无需启用mode_router","Elapsed":0}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/全局关闭保持HTTP"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/全局关闭保持HTTP","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve/全局关闭保持HTTP\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/全局关闭保持HTTP","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve/全局关闭保持HTTP (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/全局关闭保持HTTP","Elapsed":0}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/账号开关关闭保持HTTP"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/账号开关关闭保持HTTP","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve/账号开关关闭保持HTTP\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/账号开关关闭保持HTTP","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve/账号开关关闭保持HTTP (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/账号开关关闭保持HTTP","Elapsed":0}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/OAuth账号不会读取API_Key专用开关"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/OAuth账号不会读取API_Key专用开关","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve/OAuth账号不会读取API_Key专用开关\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/OAuth账号不会读取API_Key专用开关","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve/OAuth账号不会读取API_Key专用开关 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/OAuth账号不会读取API_Key专用开关","Elapsed":0}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/兼容旧键openai_ws_enabled"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/兼容旧键openai_ws_enabled","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve/兼容旧键openai_ws_enabled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/兼容旧键openai_ws_enabled","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve/兼容旧键openai_ws_enabled (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/兼容旧键openai_ws_enabled","Elapsed":0}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/按账号类型开关控制"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/按账号类型开关控制","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve/按账号类型开关控制\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/按账号类型开关控制","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve/按账号类型开关控制 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/按账号类型开关控制","Elapsed":0}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/API_Key_账号关闭开关时回退HTTP"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/API_Key_账号关闭开关时回退HTTP","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve/API_Key_账号关闭开关时回退HTTP\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/API_Key_账号关闭开关时回退HTTP","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve/API_Key_账号关闭开关时回退HTTP (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/API_Key_账号关闭开关时回退HTTP","Elapsed":0}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/未知认证类型回退HTTP"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/未知认证类型回退HTTP","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve/未知认证类型回退HTTP\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/未知认证类型回退HTTP","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve/未知认证类型回退HTTP (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/未知认证类型回退HTTP","Elapsed":0}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve","Elapsed":0}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/ctx_pool_mode_routes_to_ws_v2"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/ctx_pool_mode_routes_to_ws_v2","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/ctx_pool_mode_routes_to_ws_v2\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/ctx_pool_mode_routes_to_ws_v2","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/ctx_pool_mode_routes_to_ws_v2 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/ctx_pool_mode_routes_to_ws_v2","Elapsed":0}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/off_mode_routes_to_http"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/off_mode_routes_to_http","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/off_mode_routes_to_http\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/off_mode_routes_to_http","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/off_mode_routes_to_http (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/off_mode_routes_to_http","Elapsed":0}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/legacy_boolean_maps_to_ctx_pool_in_v2_router"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/legacy_boolean_maps_to_ctx_pool_in_v2_router","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/legacy_boolean_maps_to_ctx_pool_in_v2_router\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/legacy_boolean_maps_to_ctx_pool_in_v2_router","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/legacy_boolean_maps_to_ctx_pool_in_v2_router (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/legacy_boolean_maps_to_ctx_pool_in_v2_router","Elapsed":0}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/passthrough_mode_routes_to_ws_v2"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/passthrough_mode_routes_to_ws_v2","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/passthrough_mode_routes_to_ws_v2\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/passthrough_mode_routes_to_ws_v2","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/passthrough_mode_routes_to_ws_v2 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/passthrough_mode_routes_to_ws_v2","Elapsed":0}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/http_bridge_mode_routes_to_http_sse"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/http_bridge_mode_routes_to_http_sse","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/http_bridge_mode_routes_to_http_sse\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/http_bridge_mode_routes_to_http_sse","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/http_bridge_mode_routes_to_http_sse (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/http_bridge_mode_routes_to_http_sse","Elapsed":0}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/non-positive_concurrency_is_rejected_in_v2_router"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/non-positive_concurrency_is_rejected_in_v2_router","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/non-positive_concurrency_is_rejected_in_v2_router\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/non-positive_concurrency_is_rejected_in_v2_router","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/non-positive_concurrency_is_rejected_in_v2_router (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/non-positive_concurrency_is_rejected_in_v2_router","Elapsed":0}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2","Elapsed":0}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.904Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=501 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.904Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=501 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.904Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=501 account_type=apikey ws_host=127.0.0.1:50590 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.904Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=501 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=106 payload_key_sizes=input:34,type:15,model:7,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.904Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":501,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.904Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=501 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=unit-test-agent/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9054759+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.905Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=501 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_501_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9054759+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.905Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=501 conn_id=oa_ws_501_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9054759+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.905Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=501 conn_id=oa_ws_501_1 stream=false payload_bytes=106 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9054759+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.905Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=501 conn_id=oa_ws_501_1 idx=1 type=err bytes=153 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9054759+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.905Z\",\"logger\":\"slog\",\"msg\":\"account_rate_limited\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":501,\"platform\":\"openai\",\"reset_at\":\"2026-09-12T05:39:18.000Z\",\"reset_in\":7199000}\n"}
- {"Time":"2026-09-12T11:39:18.9054759+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:18.905Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] error_event account_id=501 conn_id=oa_ws_501_1 idx=1 fallback_reason=upstream_rate_limited can_fallback=false err_code=rate_limit_exceeded err_type=usage_limit_reached err_message=The usage limit has been reached\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:680\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGatewayS"}
- {"Time":"2026-09-12T11:39:18.9054759+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit","Output":"ervice_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_ratelimit_signal_test.go:162\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"}
- {"Time":"2026-09-12T11:39:18.9054759+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9054759+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit","Elapsed":0}
- {"Time":"2026-09-12T11:39:18.9054759+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake429PersistsRateLimit"}
- {"Time":"2026-09-12T11:39:18.9054759+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake429PersistsRateLimit","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2Handshake429PersistsRateLimit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9059857+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake429PersistsRateLimit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.905Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=502 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9059857+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake429PersistsRateLimit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.905Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=502 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9059857+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake429PersistsRateLimit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.905Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=502 account_type=apikey ws_host=127.0.0.1:50592 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9059857+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake429PersistsRateLimit","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.905Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=502 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=106 payload_key_sizes=input:34,type:15,model:7,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9059857+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake429PersistsRateLimit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.905Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":502,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:18.9059857+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake429PersistsRateLimit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.905Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=502 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=unit-test-agent/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9059857+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake429PersistsRateLimit","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.905Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=502 account_type=apikey transport=responses_websockets_v2 reason=upstream_rate_limited dial_status=429 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=- cause=openai ws dial fail: status=429 err=fail to WebSocket dial: expected handshake response status code 101 but got 429 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:50592 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9059857+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake429PersistsRateLimit","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.905Z\",\"logger\":\"slog\",\"msg\":\"openai_429_7d_limit_exhausted\",\"service\":\"sub2api\",\"env\":\"test\",\"reset_after_seconds\":7200,\"reset_at\":\"2026-09-12T05:39:18.905Z\"}\n"}
- {"Time":"2026-09-12T11:39:18.9059857+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake429PersistsRateLimit","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.905Z\",\"logger\":\"slog\",\"msg\":\"openai_account_rate_limited\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":502,\"reset_at\":\"2026-09-12T05:39:18.905Z\"}\n"}
- {"Time":"2026-09-12T11:39:18.9059857+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake429PersistsRateLimit","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.905Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_stop account_id=502 attempt=1 reason=upstream_rate_limited\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9064936+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake429PersistsRateLimit","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2Handshake429PersistsRateLimit (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9064936+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake429PersistsRateLimit","Elapsed":0}
- {"Time":"2026-09-12T11:39:18.9064936+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient"}
- {"Time":"2026-09-12T11:39:18.9064936+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:18.9064936+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.906Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=504 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.5 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9064936+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.906Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=504 account_type=apikey model=gpt-5.5 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9064936+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.906Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=504 account_type=apikey ws_host=127.0.0.1:50594 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9064936+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.906Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=504 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=75 payload_key_sizes=type:15,model:7,input:5,stream:1 input_summary=- stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9064936+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.906Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":504,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:18.9064936+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.906Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=504 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=unit-test-agent/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9064936+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:18.906Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"status_code\":502}\n"}
- {"Time":"2026-09-12T11:39:18.9064936+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:18.906Z\",\"logger\":\"slog\",\"msg\":\"openai_model_transient_state\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"model\":\"gpt-5.5\",\"failure_streak\":1,\"cooldown_ms\":0,\"block_scope\":\"account_model\"}\n"}
- {"Time":"2026-09-12T11:39:18.9064936+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.906Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=504 account_type=apikey transport=responses_websockets_v2 reason=upstream_5xx dial_status=502 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=req-ws-502 cause=openai ws dial fail: status=502 err=fail to WebSocket dial: expected handshake response status code 101 but got 502 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:50594 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:18.9064936+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.906Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=504 retry=1 max_retries=5 reason=upstream_5xx backoff_ms=120\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:19.0269272+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:19.026Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=504 account_type=apikey ws_host=127.0.0.1:50594 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:19.0274301+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:19.027Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":504,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:19.0274301+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:19.027Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=504 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=upstream_5xx force_new_conn=false header_user_agent=unit-test-agent/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:19.0279461+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:19.027Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"status_code\":502}\n"}
- {"Time":"2026-09-12T11:39:19.0279461+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:19.027Z\",\"logger\":\"slog\",\"msg\":\"openai_model_transient_state\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"model\":\"gpt-5.5\",\"failure_streak\":2,\"cooldown_ms\":10000,\"block_scope\":\"account_model\"}\n"}
- {"Time":"2026-09-12T11:39:19.0279461+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:19.027Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=504 account_type=apikey transport=responses_websockets_v2 reason=upstream_5xx dial_status=502 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=req-ws-502 cause=openai ws dial fail: status=502 err=fail to WebSocket dial: expected handshake response status code 101 but got 502 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:50594 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:19.0279461+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:19.027Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=504 retry=2 max_retries=5 reason=upstream_5xx backoff_ms=240\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:19.2686557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:19.268Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=504 account_type=apikey ws_host=127.0.0.1:50594 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:19.2686557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:19.268Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":504,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:19.2686557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:19.268Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=504 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=upstream_5xx force_new_conn=false header_user_agent=unit-test-agent/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:19.2686557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:19.268Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"status_code\":502}\n"}
- {"Time":"2026-09-12T11:39:19.2686557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:19.268Z\",\"logger\":\"slog\",\"msg\":\"openai_model_transient_state\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"model\":\"gpt-5.5\",\"failure_streak\":3,\"cooldown_ms\":45000,\"block_scope\":\"account_model\"}\n"}
- {"Time":"2026-09-12T11:39:19.2686557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:19.268Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=504 account_type=apikey transport=responses_websockets_v2 reason=upstream_5xx dial_status=502 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=req-ws-502 cause=openai ws dial fail: status=502 err=fail to WebSocket dial: expected handshake response status code 101 but got 502 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:50594 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:19.2686557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:19.268Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=504 retry=3 max_retries=5 reason=upstream_5xx backoff_ms=480\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:19.7494499+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:19.749Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=504 account_type=apikey ws_host=127.0.0.1:50594 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:19.7494499+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:19.749Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":504,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:19.7494499+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:19.749Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=504 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=upstream_5xx force_new_conn=false header_user_agent=unit-test-agent/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:19.7494499+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:19.749Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"status_code\":502}\n"}
- {"Time":"2026-09-12T11:39:19.7501749+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:19.749Z\",\"logger\":\"slog\",\"msg\":\"openai_model_transient_state\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"model\":\"gpt-5.5\",\"failure_streak\":4,\"cooldown_ms\":45000,\"block_scope\":\"account_model\"}\n"}
- {"Time":"2026-09-12T11:39:19.7501749+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:19.750Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=504 account_type=apikey transport=responses_websockets_v2 reason=upstream_5xx dial_status=502 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=req-ws-502 cause=openai ws dial fail: status=502 err=fail to WebSocket dial: expected handshake response status code 101 but got 502 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:50594 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:19.7501749+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:19.750Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=504 retry=4 max_retries=5 reason=upstream_5xx backoff_ms=960\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:20.7103659+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:20.710Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=504 account_type=apikey ws_host=127.0.0.1:50594 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:20.7107289+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:20.710Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":504,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:20.7107289+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:20.710Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=504 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=upstream_5xx force_new_conn=false header_user_agent=unit-test-agent/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:20.7107289+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:20.710Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"status_code\":502}\n"}
- {"Time":"2026-09-12T11:39:20.7107289+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:20.710Z\",\"logger\":\"slog\",\"msg\":\"openai_model_transient_state\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"model\":\"gpt-5.5\",\"failure_streak\":5,\"cooldown_ms\":45000,\"block_scope\":\"account_model\"}\n"}
- {"Time":"2026-09-12T11:39:20.7107289+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:20.710Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=504 account_type=apikey transport=responses_websockets_v2 reason=upstream_5xx dial_status=502 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=req-ws-502 cause=openai ws dial fail: status=502 err=fail to WebSocket dial: expected handshake response status code 101 but got 502 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:50594 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:20.7107289+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:20.710Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=504 retry=5 max_retries=5 reason=upstream_5xx backoff_ms=1920\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:22.6311965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:22.631Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=504 account_type=apikey ws_host=127.0.0.1:50594 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:22.6311965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:22.631Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":504,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:22.6311965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:22.631Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=504 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=upstream_5xx force_new_conn=false header_user_agent=unit-test-agent/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:22.6311965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:22.631Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"status_code\":502}\n"}
- {"Time":"2026-09-12T11:39:22.6311965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:22.631Z\",\"logger\":\"slog\",\"msg\":\"openai_model_transient_state\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"model\":\"gpt-5.5\",\"failure_streak\":6,\"cooldown_ms\":45000,\"block_scope\":\"account_model\"}\n"}
- {"Time":"2026-09-12T11:39:22.6311965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:22.631Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=504 account_type=apikey transport=responses_websockets_v2 reason=upstream_5xx dial_status=502 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=req-ws-502 cause=openai ws dial fail: status=502 err=fail to WebSocket dial: expected handshake response status code 101 but got 502 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:50594 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:22.6311965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:22.631Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_exhausted account_id=504 attempts=6 max_retries=5 reason=upstream_5xx\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:22.6316981+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:22.631Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=504 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.5 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:22.6316981+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:22.631Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=504 account_type=apikey model=gpt-5.5 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:22.6316981+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:22.631Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=504 account_type=apikey ws_host=127.0.0.1:50594 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:22.6316981+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:22.631Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=504 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=75 payload_key_sizes=type:15,model:7,input:5,stream:1 input_summary=- stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:22.6316981+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:22.631Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":504,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:22.6316981+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:22.631Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=504 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=unit-test-agent/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:22.6316981+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:22.631Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"status_code\":502}\n"}
- {"Time":"2026-09-12T11:39:22.6316981+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:22.631Z\",\"logger\":\"slog\",\"msg\":\"openai_model_transient_state\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"model\":\"gpt-5.5\",\"failure_streak\":7,\"cooldown_ms\":45000,\"block_scope\":\"account_model\"}\n"}
- {"Time":"2026-09-12T11:39:22.6316981+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:22.631Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=504 account_type=apikey transport=responses_websockets_v2 reason=upstream_5xx dial_status=502 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=req-ws-502 cause=openai ws dial fail: status=502 err=fail to WebSocket dial: expected handshake response status code 101 but got 502 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:50594 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:22.6316981+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:22.631Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=504 retry=1 max_retries=5 reason=upstream_5xx backoff_ms=120\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:22.7521677+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:22.752Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=504 account_type=apikey ws_host=127.0.0.1:50594 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:22.7521677+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:22.752Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":504,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:22.7521677+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:22.752Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=504 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=upstream_5xx force_new_conn=false header_user_agent=unit-test-agent/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:22.7521677+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:22.752Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"status_code\":502}\n"}
- {"Time":"2026-09-12T11:39:22.7521677+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:22.752Z\",\"logger\":\"slog\",\"msg\":\"openai_model_transient_state\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"model\":\"gpt-5.5\",\"failure_streak\":8,\"cooldown_ms\":45000,\"block_scope\":\"account_model\"}\n"}
- {"Time":"2026-09-12T11:39:22.7521677+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:22.752Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=504 account_type=apikey transport=responses_websockets_v2 reason=upstream_5xx dial_status=502 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=req-ws-502 cause=openai ws dial fail: status=502 err=fail to WebSocket dial: expected handshake response status code 101 but got 502 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:50594 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:22.7521677+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:22.752Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=504 retry=2 max_retries=5 reason=upstream_5xx backoff_ms=240\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:22.9931808+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:22.992Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=504 account_type=apikey ws_host=127.0.0.1:50594 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:22.9931808+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:22.992Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":504,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:22.9931808+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:22.992Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=504 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=upstream_5xx force_new_conn=false header_user_agent=unit-test-agent/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:22.9931808+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:22.993Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"status_code\":502}\n"}
- {"Time":"2026-09-12T11:39:22.9931808+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:22.993Z\",\"logger\":\"slog\",\"msg\":\"openai_model_transient_state\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"model\":\"gpt-5.5\",\"failure_streak\":9,\"cooldown_ms\":45000,\"block_scope\":\"account_model\"}\n"}
- {"Time":"2026-09-12T11:39:22.9931808+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:22.993Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=504 account_type=apikey transport=responses_websockets_v2 reason=upstream_5xx dial_status=502 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=req-ws-502 cause=openai ws dial fail: status=502 err=fail to WebSocket dial: expected handshake response status code 101 but got 502 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:50594 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:22.9931808+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:22.993Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=504 retry=3 max_retries=5 reason=upstream_5xx backoff_ms=480\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:23.4735998+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:23.473Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=504 account_type=apikey ws_host=127.0.0.1:50594 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:23.4735998+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:23.473Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":504,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:23.4735998+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:23.473Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=504 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=upstream_5xx force_new_conn=false header_user_agent=unit-test-agent/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:23.4735998+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:23.473Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"status_code\":502}\n"}
- {"Time":"2026-09-12T11:39:23.4735998+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:23.473Z\",\"logger\":\"slog\",\"msg\":\"openai_model_transient_state\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"model\":\"gpt-5.5\",\"failure_streak\":10,\"cooldown_ms\":45000,\"block_scope\":\"account_model\"}\n"}
- {"Time":"2026-09-12T11:39:23.4735998+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:23.473Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=504 account_type=apikey transport=responses_websockets_v2 reason=upstream_5xx dial_status=502 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=req-ws-502 cause=openai ws dial fail: status=502 err=fail to WebSocket dial: expected handshake response status code 101 but got 502 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:50594 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:23.4735998+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:23.473Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=504 retry=4 max_retries=5 reason=upstream_5xx backoff_ms=960\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:24.4338882+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:24.433Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=504 account_type=apikey ws_host=127.0.0.1:50594 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:24.4338882+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:24.433Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":504,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:24.4338882+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:24.433Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=504 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=upstream_5xx force_new_conn=false header_user_agent=unit-test-agent/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:24.4338882+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:24.433Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"status_code\":502}\n"}
- {"Time":"2026-09-12T11:39:24.4338882+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:24.433Z\",\"logger\":\"slog\",\"msg\":\"openai_model_transient_state\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"model\":\"gpt-5.5\",\"failure_streak\":11,\"cooldown_ms\":45000,\"block_scope\":\"account_model\"}\n"}
- {"Time":"2026-09-12T11:39:24.4338882+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:24.433Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=504 account_type=apikey transport=responses_websockets_v2 reason=upstream_5xx dial_status=502 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=req-ws-502 cause=openai ws dial fail: status=502 err=fail to WebSocket dial: expected handshake response status code 101 but got 502 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:50594 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:24.4338882+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:24.433Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=504 retry=5 max_retries=5 reason=upstream_5xx backoff_ms=1920\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:26.3545452+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:26.354Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=504 account_type=apikey ws_host=127.0.0.1:50594 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:26.3545452+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:26.354Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":504,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:26.3545452+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:26.354Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=504 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=upstream_5xx force_new_conn=false header_user_agent=unit-test-agent/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:26.3551121+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:26.354Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"status_code\":502}\n"}
- {"Time":"2026-09-12T11:39:26.3551121+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:26.355Z\",\"logger\":\"slog\",\"msg\":\"openai_model_transient_state\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"model\":\"gpt-5.5\",\"failure_streak\":12,\"cooldown_ms\":45000,\"block_scope\":\"account_model\"}\n"}
- {"Time":"2026-09-12T11:39:26.3551121+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:26.355Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=504 account_type=apikey transport=responses_websockets_v2 reason=upstream_5xx dial_status=502 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=req-ws-502 cause=openai ws dial fail: status=502 err=fail to WebSocket dial: expected handshake response status code 101 but got 502 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:50594 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:26.3551121+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:26.355Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_exhausted account_id=504 attempts=6 max_retries=5 reason=upstream_5xx\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:26.3551121+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient (7.45s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:26.3551121+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Elapsed":7.45}
- {"Time":"2026-09-12T11:39:26.3551121+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ErrorEventUsageLimitPersistsRateLimit"}
- {"Time":"2026-09-12T11:39:26.3551121+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ErrorEventUsageLimitPersistsRateLimit","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ErrorEventUsageLimitPersistsRateLimit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:26.3557054+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ErrorEventUsageLimitPersistsRateLimit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:26.355Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":503,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:39:26.3562805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ErrorEventUsageLimitPersistsRateLimit","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:26.355Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=503 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=false has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:26.3562805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ErrorEventUsageLimitPersistsRateLimit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:26.355Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=503 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:26.3562805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ErrorEventUsageLimitPersistsRateLimit","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:26.356Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=503 turn=1 conn_id=oa_ws_503_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:26.3562805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ErrorEventUsageLimitPersistsRateLimit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:26.356Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=503 turn=1 conn_id=oa_ws_503_1 payload_bytes=59\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:26.3562805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ErrorEventUsageLimitPersistsRateLimit","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:26.356Z\",\"logger\":\"slog\",\"msg\":\"account_rate_limited\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":503,\"platform\":\"openai\",\"reset_at\":\"2026-09-12T05:09:26.000Z\",\"reset_in\":5399000}\n"}
- {"Time":"2026-09-12T11:39:26.3562805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ErrorEventUsageLimitPersistsRateLimit","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:26.356Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_error_event account_id=503 turn=1 conn_id=oa_ws_503_1 idx=1 fallback_reason=upstream_rate_limited err_code=rate_limit_exceeded err_type=usage_limit_reached err_message=The usage limit has been reached previous_response_id=- previous_response_id_kind=empty response_id=- store_disabled=false has_prompt_cache_key=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).ProxyResponsesWebSocketFromClient.func10\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_ingress.go:1113\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).ProxyResponsesWebSocketFromCli"}
- {"Time":"2026-09-12T11:39:26.3562805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ErrorEventUsageLimitPersistsRateLimit","Output":"ent\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_ingress.go:1785\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ErrorEventUsageLimitPersistsRateLimit.func1\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_ratelimit_signal_test.go:369\\nnet/http.HandlerFunc.ServeHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/net/http/server.go:2338\\nnet/http.serverHandler.ServeHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/net/http/server.go:3413\\nnet/http.(*conn).serve\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/net/http/server.go:2137\"}\n"}
- {"Time":"2026-09-12T11:39:26.3562805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ErrorEventUsageLimitPersistsRateLimit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:26.356Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=503 conn_id=oa_ws_503_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:26.3562805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ErrorEventUsageLimitPersistsRateLimit","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ErrorEventUsageLimitPersistsRateLimit (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:26.3562805+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ErrorEventUsageLimitPersistsRateLimit","Elapsed":0}
- {"Time":"2026-09-12T11:39:26.3562805+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_UpdateCodexUsageSnapshot_ExhaustedSnapshotDoesNotSetRateLimit"}
- {"Time":"2026-09-12T11:39:26.3562805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_UpdateCodexUsageSnapshot_ExhaustedSnapshotDoesNotSetRateLimit","Output":"=== RUN TestOpenAIGatewayService_UpdateCodexUsageSnapshot_ExhaustedSnapshotDoesNotSetRateLimit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:28.35667+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_UpdateCodexUsageSnapshot_ExhaustedSnapshotDoesNotSetRateLimit","Output":"--- PASS: TestOpenAIGatewayService_UpdateCodexUsageSnapshot_ExhaustedSnapshotDoesNotSetRateLimit (2.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:28.35667+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_UpdateCodexUsageSnapshot_ExhaustedSnapshotDoesNotSetRateLimit","Elapsed":2}
- {"Time":"2026-09-12T11:39:28.35667+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_UpdateCodexUsageSnapshot_NonExhaustedSnapshotDoesNotSetRateLimit"}
- {"Time":"2026-09-12T11:39:28.35667+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_UpdateCodexUsageSnapshot_NonExhaustedSnapshotDoesNotSetRateLimit","Output":"=== RUN TestOpenAIGatewayService_UpdateCodexUsageSnapshot_NonExhaustedSnapshotDoesNotSetRateLimit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:28.5572974+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_UpdateCodexUsageSnapshot_NonExhaustedSnapshotDoesNotSetRateLimit","Output":"--- PASS: TestOpenAIGatewayService_UpdateCodexUsageSnapshot_NonExhaustedSnapshotDoesNotSetRateLimit (0.20s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:28.5572974+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_UpdateCodexUsageSnapshot_NonExhaustedSnapshotDoesNotSetRateLimit","Elapsed":0.2}
- {"Time":"2026-09-12T11:39:28.5572974+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_UpdateCodexUsageSnapshot_ThrottlesExtraWrites"}
- {"Time":"2026-09-12T11:39:28.5572974+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_UpdateCodexUsageSnapshot_ThrottlesExtraWrites","Output":"=== RUN TestOpenAIGatewayService_UpdateCodexUsageSnapshot_ThrottlesExtraWrites\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:28.7576192+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_UpdateCodexUsageSnapshot_ThrottlesExtraWrites","Output":"--- PASS: TestOpenAIGatewayService_UpdateCodexUsageSnapshot_ThrottlesExtraWrites (0.20s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:28.7576192+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_UpdateCodexUsageSnapshot_ThrottlesExtraWrites","Elapsed":0.2}
- {"Time":"2026-09-12T11:39:28.7576192+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetSchedulableAccount_ExhaustedCodexExtraDoesNotSetRateLimit"}
- {"Time":"2026-09-12T11:39:28.7576192+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetSchedulableAccount_ExhaustedCodexExtraDoesNotSetRateLimit","Output":"=== RUN TestOpenAIGatewayService_GetSchedulableAccount_ExhaustedCodexExtraDoesNotSetRateLimit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:30.7577514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetSchedulableAccount_ExhaustedCodexExtraDoesNotSetRateLimit","Output":"--- PASS: TestOpenAIGatewayService_GetSchedulableAccount_ExhaustedCodexExtraDoesNotSetRateLimit (2.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:30.7577514+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetSchedulableAccount_ExhaustedCodexExtraDoesNotSetRateLimit","Elapsed":2}
- {"Time":"2026-09-12T11:39:30.7577514+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdminService_ListAccounts_ExhaustedCodexExtraDoesNotSetRateLimit"}
- {"Time":"2026-09-12T11:39:30.7577514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdminService_ListAccounts_ExhaustedCodexExtraDoesNotSetRateLimit","Output":"=== RUN TestAdminService_ListAccounts_ExhaustedCodexExtraDoesNotSetRateLimit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:32.7581568+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdminService_ListAccounts_ExhaustedCodexExtraDoesNotSetRateLimit","Output":"--- PASS: TestAdminService_ListAccounts_ExhaustedCodexExtraDoesNotSetRateLimit (2.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:32.7581568+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdminService_ListAccounts_ExhaustedCodexExtraDoesNotSetRateLimit","Elapsed":2}
- {"Time":"2026-09-12T11:39:32.7581568+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorHTTPStatusFromRaw_UsageLimitReachedIs429"}
- {"Time":"2026-09-12T11:39:32.7581568+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorHTTPStatusFromRaw_UsageLimitReachedIs429","Output":"=== RUN TestOpenAIWSErrorHTTPStatusFromRaw_UsageLimitReachedIs429\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:32.7581568+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorHTTPStatusFromRaw_UsageLimitReachedIs429","Output":"--- PASS: TestOpenAIWSErrorHTTPStatusFromRaw_UsageLimitReachedIs429 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:32.7581568+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorHTTPStatusFromRaw_UsageLimitReachedIs429","Elapsed":0}
- {"Time":"2026-09-12T11:39:32.7581568+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRateLimitFailoverError_OAuthKeepsSameAccountDeadline"}
- {"Time":"2026-09-12T11:39:32.7581568+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRateLimitFailoverError_OAuthKeepsSameAccountDeadline","Output":"=== RUN TestOpenAIWSRateLimitFailoverError_OAuthKeepsSameAccountDeadline\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:32.7581568+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRateLimitFailoverError_OAuthKeepsSameAccountDeadline","Output":"--- PASS: TestOpenAIWSRateLimitFailoverError_OAuthKeepsSameAccountDeadline (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:32.7587334+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRateLimitFailoverError_OAuthKeepsSameAccountDeadline","Elapsed":0}
- {"Time":"2026-09-12T11:39:32.7587334+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplayStateBuildAllocationBounded"}
- {"Time":"2026-09-12T11:39:32.7587334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplayStateBuildAllocationBounded","Output":"=== RUN TestOpenAIWSReplayStateBuildAllocationBounded\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:32.8568434+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplayStateBuildAllocationBounded","Output":"--- PASS: TestOpenAIWSReplayStateBuildAllocationBounded (0.10s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:32.8568434+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplayStateBuildAllocationBounded","Elapsed":0.1}
- {"Time":"2026-09-12T11:39:32.8568434+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_BindGetDeleteResponseAccount"}
- {"Time":"2026-09-12T11:39:32.8568434+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_BindGetDeleteResponseAccount","Output":"=== RUN TestOpenAIWSStateStore_BindGetDeleteResponseAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:32.8568434+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_BindGetDeleteResponseAccount","Output":"--- PASS: TestOpenAIWSStateStore_BindGetDeleteResponseAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:32.8568434+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_BindGetDeleteResponseAccount","Elapsed":0}
- {"Time":"2026-09-12T11:39:32.8568434+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_HTTPResponseOwnerPersistsAcrossStoreInstances"}
- {"Time":"2026-09-12T11:39:32.8568434+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_HTTPResponseOwnerPersistsAcrossStoreInstances","Output":"=== RUN TestOpenAIWSStateStore_HTTPResponseOwnerPersistsAcrossStoreInstances\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:32.8568434+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_HTTPResponseOwnerPersistsAcrossStoreInstances","Output":"--- PASS: TestOpenAIWSStateStore_HTTPResponseOwnerPersistsAcrossStoreInstances (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:32.8568434+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_HTTPResponseOwnerPersistsAcrossStoreInstances","Elapsed":0}
- {"Time":"2026-09-12T11:39:32.8568434+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_ResponseConnTTL"}
- {"Time":"2026-09-12T11:39:32.8568434+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_ResponseConnTTL","Output":"=== RUN TestOpenAIWSStateStore_ResponseConnTTL\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:32.9174116+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_ResponseConnTTL","Output":"--- PASS: TestOpenAIWSStateStore_ResponseConnTTL (0.06s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:32.9174116+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_ResponseConnTTL","Elapsed":0.06}
- {"Time":"2026-09-12T11:39:32.9174116+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_SessionTurnStateTTL"}
- {"Time":"2026-09-12T11:39:32.9174116+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_SessionTurnStateTTL","Output":"=== RUN TestOpenAIWSStateStore_SessionTurnStateTTL\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:32.9777041+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_SessionTurnStateTTL","Output":"--- PASS: TestOpenAIWSStateStore_SessionTurnStateTTL (0.06s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:32.9777041+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_SessionTurnStateTTL","Elapsed":0.06}
- {"Time":"2026-09-12T11:39:32.9782398+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_SessionConnTTL"}
- {"Time":"2026-09-12T11:39:32.9782398+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_SessionConnTTL","Output":"=== RUN TestOpenAIWSStateStore_SessionConnTTL\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0377944+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_SessionConnTTL","Output":"--- PASS: TestOpenAIWSStateStore_SessionConnTTL (0.06s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0377944+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_SessionConnTTL","Elapsed":0.06}
- {"Time":"2026-09-12T11:39:33.0377944+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_GetResponseAccount_NoStaleAfterCacheMiss"}
- {"Time":"2026-09-12T11:39:33.0377944+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_GetResponseAccount_NoStaleAfterCacheMiss","Output":"=== RUN TestOpenAIWSStateStore_GetResponseAccount_NoStaleAfterCacheMiss\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0377944+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_GetResponseAccount_NoStaleAfterCacheMiss","Output":"--- PASS: TestOpenAIWSStateStore_GetResponseAccount_NoStaleAfterCacheMiss (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0377944+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_GetResponseAccount_NoStaleAfterCacheMiss","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0377944+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_MaybeCleanupRemovesExpiredIncrementally"}
- {"Time":"2026-09-12T11:39:33.0377944+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_MaybeCleanupRemovesExpiredIncrementally","Output":"=== RUN TestOpenAIWSStateStore_MaybeCleanupRemovesExpiredIncrementally\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0377944+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_MaybeCleanupRemovesExpiredIncrementally","Output":"--- PASS: TestOpenAIWSStateStore_MaybeCleanupRemovesExpiredIncrementally (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0377944+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_MaybeCleanupRemovesExpiredIncrementally","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0377944+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_RedisOpsUseShortTimeout"}
- {"Time":"2026-09-12T11:39:33.0377944+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_RedisOpsUseShortTimeout","Output":"=== RUN TestOpenAIWSStateStore_RedisOpsUseShortTimeout\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0383136+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_RedisOpsUseShortTimeout","Output":"--- PASS: TestOpenAIWSStateStore_RedisOpsUseShortTimeout (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0383136+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_RedisOpsUseShortTimeout","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0383136+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIWSStateStoreRedisTimeout_WithParentContext"}
- {"Time":"2026-09-12T11:39:33.0383136+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIWSStateStoreRedisTimeout_WithParentContext","Output":"=== RUN TestWithOpenAIWSStateStoreRedisTimeout_WithParentContext\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0383136+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIWSStateStoreRedisTimeout_WithParentContext","Output":"--- PASS: TestWithOpenAIWSStateStoreRedisTimeout_WithParentContext (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0383136+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIWSStateStoreRedisTimeout_WithParentContext","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0383136+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughTurnLifecycle_SerializesTerminalCommitAndNextTurn"}
- {"Time":"2026-09-12T11:39:33.0383136+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughTurnLifecycle_SerializesTerminalCommitAndNextTurn","Output":"=== RUN TestOpenAIWSPassthroughTurnLifecycle_SerializesTerminalCommitAndNextTurn\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughTurnLifecycle_SerializesTerminalCommitAndNextTurn","Output":"--- PASS: TestOpenAIWSPassthroughTurnLifecycle_SerializesTerminalCommitAndNextTurn (0.05s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughTurnLifecycle_SerializesTerminalCommitAndNextTurn","Elapsed":0.05}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIFastPolicyBlockedResponseMarksBusinessLimited"}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIFastPolicyBlockedResponseMarksBusinessLimited","Output":"=== RUN TestWriteOpenAIFastPolicyBlockedResponseMarksBusinessLimited\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIFastPolicyBlockedResponseMarksBusinessLimited","Output":"--- PASS: TestWriteOpenAIFastPolicyBlockedResponseMarksBusinessLimited (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIFastPolicyBlockedResponseMarksBusinessLimited","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation"}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation","Output":"=== RUN TestOpsServiceGetOpenAITokenStats_Validation\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/filter_不能为空"}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/filter_不能为空","Output":"=== RUN TestOpsServiceGetOpenAITokenStats_Validation/filter_不能为空\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/filter_不能为空","Output":"--- PASS: TestOpsServiceGetOpenAITokenStats_Validation/filter_不能为空 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/filter_不能为空","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/start_time/end_time_必填"}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/start_time/end_time_必填","Output":"=== RUN TestOpsServiceGetOpenAITokenStats_Validation/start_time/end_time_必填\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/start_time/end_time_必填","Output":"--- PASS: TestOpsServiceGetOpenAITokenStats_Validation/start_time/end_time_必填 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/start_time/end_time_必填","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/start_time_不能晚于_end_time"}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/start_time_不能晚于_end_time","Output":"=== RUN TestOpsServiceGetOpenAITokenStats_Validation/start_time_不能晚于_end_time\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/start_time_不能晚于_end_time","Output":"--- PASS: TestOpsServiceGetOpenAITokenStats_Validation/start_time_不能晚于_end_time (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/start_time_不能晚于_end_time","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/group_id_必须大于_0"}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/group_id_必须大于_0","Output":"=== RUN TestOpsServiceGetOpenAITokenStats_Validation/group_id_必须大于_0\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/group_id_必须大于_0","Output":"--- PASS: TestOpsServiceGetOpenAITokenStats_Validation/group_id_必须大于_0 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/group_id_必须大于_0","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/top_n_与分页参数互斥"}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/top_n_与分页参数互斥","Output":"=== RUN TestOpsServiceGetOpenAITokenStats_Validation/top_n_与分页参数互斥\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/top_n_与分页参数互斥","Output":"--- PASS: TestOpsServiceGetOpenAITokenStats_Validation/top_n_与分页参数互斥 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/top_n_与分页参数互斥","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/top_n_参数越界"}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/top_n_参数越界","Output":"=== RUN TestOpsServiceGetOpenAITokenStats_Validation/top_n_参数越界\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/top_n_参数越界","Output":"--- PASS: TestOpsServiceGetOpenAITokenStats_Validation/top_n_参数越界 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/top_n_参数越界","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/page_size_参数越界"}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/page_size_参数越界","Output":"=== RUN TestOpsServiceGetOpenAITokenStats_Validation/page_size_参数越界\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/page_size_参数越界","Output":"--- PASS: TestOpsServiceGetOpenAITokenStats_Validation/page_size_参数越界 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/page_size_参数越界","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation","Output":"--- PASS: TestOpsServiceGetOpenAITokenStats_Validation (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_DefaultPagination"}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_DefaultPagination","Output":"=== RUN TestOpsServiceGetOpenAITokenStats_DefaultPagination\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_DefaultPagination","Output":"--- PASS: TestOpsServiceGetOpenAITokenStats_DefaultPagination (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_DefaultPagination","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_RepoUnavailable"}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_RepoUnavailable","Output":"=== RUN TestOpsServiceGetOpenAITokenStats_RepoUnavailable\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_RepoUnavailable","Output":"--- PASS: TestOpsServiceGetOpenAITokenStats_RepoUnavailable (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_RepoUnavailable","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpsAdvancedSettings_DefaultSnapshotHidesOpenAITokenStats"}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpsAdvancedSettings_DefaultSnapshotHidesOpenAITokenStats","Output":"=== RUN TestGetOpsAdvancedSettings_DefaultSnapshotHidesOpenAITokenStats\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpsAdvancedSettings_DefaultSnapshotHidesOpenAITokenStats","Output":"--- PASS: TestGetOpsAdvancedSettings_DefaultSnapshotHidesOpenAITokenStats (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpsAdvancedSettings_DefaultSnapshotHidesOpenAITokenStats","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUpdateOpsAdvancedSettings_PersistsOpenAITokenStatsVisibility"}
- {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUpdateOpsAdvancedSettings_PersistsOpenAITokenStatsVisibility","Output":"=== RUN TestUpdateOpsAdvancedSettings_PersistsOpenAITokenStatsVisibility\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.089461+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUpdateOpsAdvancedSettings_PersistsOpenAITokenStatsVisibility","Output":"--- PASS: TestUpdateOpsAdvancedSettings_PersistsOpenAITokenStatsVisibility (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.089461+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUpdateOpsAdvancedSettings_PersistsOpenAITokenStatsVisibility","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.089461+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIQuotaAutoPauseSettings_ReadsDefaultsFromOpsAdvancedSettings"}
- {"Time":"2026-09-12T11:39:33.089461+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIQuotaAutoPauseSettings_ReadsDefaultsFromOpsAdvancedSettings","Output":"=== RUN TestGetOpenAIQuotaAutoPauseSettings_ReadsDefaultsFromOpsAdvancedSettings\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.089461+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIQuotaAutoPauseSettings_ReadsDefaultsFromOpsAdvancedSettings","Output":"--- PASS: TestGetOpenAIQuotaAutoPauseSettings_ReadsDefaultsFromOpsAdvancedSettings (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.089461+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIQuotaAutoPauseSettings_ReadsDefaultsFromOpsAdvancedSettings","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.089461+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIQuotaAutoPauseSettings_ColdCacheNonBlocking"}
- {"Time":"2026-09-12T11:39:33.089461+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIQuotaAutoPauseSettings_ColdCacheNonBlocking","Output":"=== RUN TestGetOpenAIQuotaAutoPauseSettings_ColdCacheNonBlocking\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.089461+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIQuotaAutoPauseSettings_ColdCacheNonBlocking","Output":"--- PASS: TestGetOpenAIQuotaAutoPauseSettings_ColdCacheNonBlocking (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.089461+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIQuotaAutoPauseSettings_ColdCacheNonBlocking","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.089461+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIQuotaAutoPauseSettings_VisibleImmediately"}
- {"Time":"2026-09-12T11:39:33.089461+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIQuotaAutoPauseSettings_VisibleImmediately","Output":"=== RUN TestSetOpenAIQuotaAutoPauseSettings_VisibleImmediately\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.089461+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIQuotaAutoPauseSettings_VisibleImmediately","Output":"--- PASS: TestSetOpenAIQuotaAutoPauseSettings_VisibleImmediately (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.089461+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIQuotaAutoPauseSettings_VisibleImmediately","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0899806+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPluginManagerRoutingSelectsOnlyEligibleOpenAIOAuthAccounts"}
- {"Time":"2026-09-12T11:39:33.0899806+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPluginManagerRoutingSelectsOnlyEligibleOpenAIOAuthAccounts","Output":"=== RUN TestPluginManagerRoutingSelectsOnlyEligibleOpenAIOAuthAccounts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0899806+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPluginManagerRoutingSelectsOnlyEligibleOpenAIOAuthAccounts","Output":"--- PASS: TestPluginManagerRoutingSelectsOnlyEligibleOpenAIOAuthAccounts (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0899806+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPluginManagerRoutingSelectsOnlyEligibleOpenAIOAuthAccounts","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0899806+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayPluginRoutingPreservesAPIKeyAndFailsClosedForOAuth"}
- {"Time":"2026-09-12T11:39:33.0899806+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayPluginRoutingPreservesAPIKeyAndFailsClosedForOAuth","Output":"=== RUN TestOpenAIGatewayPluginRoutingPreservesAPIKeyAndFailsClosedForOAuth\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0899806+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayPluginRoutingPreservesAPIKeyAndFailsClosedForOAuth","Output":"--- PASS: TestOpenAIGatewayPluginRoutingPreservesAPIKeyAndFailsClosedForOAuth (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0899806+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayPluginRoutingPreservesAPIKeyAndFailsClosedForOAuth","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0899806+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuiltInOpenAITransportPublisherDoesNotRequireConfiguration"}
- {"Time":"2026-09-12T11:39:33.0899806+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuiltInOpenAITransportPublisherDoesNotRequireConfiguration","Output":"=== RUN TestBuiltInOpenAITransportPublisherDoesNotRequireConfiguration\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuiltInOpenAITransportPublisherDoesNotRequireConfiguration","Output":"--- PASS: TestBuiltInOpenAITransportPublisherDoesNotRequireConfiguration (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuiltInOpenAITransportPublisherDoesNotRequireConfiguration","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_Gpt53CodexSparkUsesGpt51CodexPricing"}
- {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_Gpt53CodexSparkUsesGpt51CodexPricing","Output":"=== RUN TestGetModelPricing_Gpt53CodexSparkUsesGpt51CodexPricing\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_Gpt53CodexSparkUsesGpt51CodexPricing","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.091Z\",\"msg\":\"[Pricing][SparkBilling] gpt-5.3-codex-spark -\u003e gpt-5.1-codex billing\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_Gpt53CodexSparkUsesGpt51CodexPricing","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.091Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.3-codex-spark -\u003e gpt-5.1-codex\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"}
- {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_Gpt53CodexSparkUsesGpt51CodexPricing","Output":"--- PASS: TestGetModelPricing_Gpt53CodexSparkUsesGpt51CodexPricing (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_Gpt53CodexSparkUsesGpt51CodexPricing","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_Gpt53CodexFallbackStillUsesGpt52Codex"}
- {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_Gpt53CodexFallbackStillUsesGpt52Codex","Output":"=== RUN TestGetModelPricing_Gpt53CodexFallbackStillUsesGpt52Codex\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_Gpt53CodexFallbackStillUsesGpt52Codex","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.091Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.3-codex -\u003e gpt-5.2-codex\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"}
- {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_Gpt53CodexFallbackStillUsesGpt52Codex","Output":"--- PASS: TestGetModelPricing_Gpt53CodexFallbackStillUsesGpt52Codex (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_Gpt53CodexFallbackStillUsesGpt52Codex","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_OpenAIFallbackMatchedLoggedAsInfo"}
- {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_OpenAIFallbackMatchedLoggedAsInfo","Output":"=== RUN TestGetModelPricing_OpenAIFallbackMatchedLoggedAsInfo\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_OpenAIFallbackMatchedLoggedAsInfo","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.091Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.3-codex -\u003e gpt-5.2-codex\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"}
- {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_OpenAIFallbackMatchedLoggedAsInfo","Output":"--- PASS: TestGetModelPricing_OpenAIFallbackMatchedLoggedAsInfo (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_OpenAIFallbackMatchedLoggedAsInfo","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_OpenAICompactAliasUsesStaticFallback"}
- {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_OpenAICompactAliasUsesStaticFallback","Output":"=== RUN TestGetModelPricing_OpenAICompactAliasUsesStaticFallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_OpenAICompactAliasUsesStaticFallback","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.091Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.5 -\u003e gpt-5.4(static)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"}
- {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_OpenAICompactAliasUsesStaticFallback","Output":"--- PASS: TestGetModelPricing_OpenAICompactAliasUsesStaticFallback (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_OpenAICompactAliasUsesStaticFallback","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultPricingUsesCurrentCodexAutoReviewBaseRates"}
- {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultPricingUsesCurrentCodexAutoReviewBaseRates","Output":"=== RUN TestDefaultPricingUsesCurrentCodexAutoReviewBaseRates\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0943017+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultPricingUsesCurrentCodexAutoReviewBaseRates","Output":"--- PASS: TestDefaultPricingUsesCurrentCodexAutoReviewBaseRates (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0943017+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultPricingUsesCurrentCodexAutoReviewBaseRates","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy","Output":"=== RUN TestGetCodexRestrictionPolicy\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy","Output":"--- PASS: TestGetCodexRestrictionPolicy (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_DefaultsSafe"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_DefaultsSafe","Output":"=== RUN TestGetCodexRestrictionPolicy_DefaultsSafe\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_DefaultsSafe","Output":"--- PASS: TestGetCodexRestrictionPolicy_DefaultsSafe (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_DefaultsSafe","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_InvalidJSONSafe"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_InvalidJSONSafe","Output":"=== RUN TestGetCodexRestrictionPolicy_InvalidJSONSafe\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_InvalidJSONSafe","Output":"--- PASS: TestGetCodexRestrictionPolicy_InvalidJSONSafe (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_InvalidJSONSafe","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting","Output":"=== RUN TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting/legacy_true_appends_Claude_Code_entry_to_whitelist"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting/legacy_true_appends_Claude_Code_entry_to_whitelist","Output":"=== RUN TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting/legacy_true_appends_Claude_Code_entry_to_whitelist\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting/legacy_true_appends_Claude_Code_entry_to_whitelist","Output":"--- PASS: TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting/legacy_true_appends_Claude_Code_entry_to_whitelist (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting/legacy_true_appends_Claude_Code_entry_to_whitelist","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting/legacy_true_does_not_duplicate_existing_Claude_Code_entry"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting/legacy_true_does_not_duplicate_existing_Claude_Code_entry","Output":"=== RUN TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting/legacy_true_does_not_duplicate_existing_Claude_Code_entry\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting/legacy_true_does_not_duplicate_existing_Claude_Code_entry","Output":"--- PASS: TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting/legacy_true_does_not_duplicate_existing_Claude_Code_entry (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting/legacy_true_does_not_duplicate_existing_Claude_Code_entry","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting","Output":"--- PASS: TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients","Output":"=== RUN TestGetCodexRestrictionPolicy_AllowAppServerClients\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients/显式_true_开启"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients/显式_true_开启","Output":"=== RUN TestGetCodexRestrictionPolicy_AllowAppServerClients/显式_true_开启\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients/显式_true_开启","Output":"--- PASS: TestGetCodexRestrictionPolicy_AllowAppServerClients/显式_true_开启 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients/显式_true_开启","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients/缺失默认_false"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients/缺失默认_false","Output":"=== RUN TestGetCodexRestrictionPolicy_AllowAppServerClients/缺失默认_false\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients/缺失默认_false","Output":"--- PASS: TestGetCodexRestrictionPolicy_AllowAppServerClients/缺失默认_false (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients/缺失默认_false","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients/非_true_值视为_false"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients/非_true_值视为_false","Output":"=== RUN TestGetCodexRestrictionPolicy_AllowAppServerClients/非_true_值视为_false\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients/非_true_值视为_false","Output":"--- PASS: TestGetCodexRestrictionPolicy_AllowAppServerClients/非_true_值视为_false (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients/非_true_值视为_false","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients","Output":"--- PASS: TestGetCodexRestrictionPolicy_AllowAppServerClients (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals","Output":"=== RUN TestGetCodexRestrictionPolicy_EngineFingerprintSignals\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals/键缺失_→_默认种子(只勾x-codex-)"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals/键缺失_→_默认种子(只勾x-codex-)","Output":"=== RUN TestGetCodexRestrictionPolicy_EngineFingerprintSignals/键缺失_→_默认种子(只勾x-codex-)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals/键缺失_→_默认种子(只勾x-codex-)","Output":"--- PASS: TestGetCodexRestrictionPolicy_EngineFingerprintSignals/键缺失_→_默认种子(只勾x-codex-) (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals/键缺失_→_默认种子(只勾x-codex-)","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals/显式配置_→_原样采用"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals/显式配置_→_原样采用","Output":"=== RUN TestGetCodexRestrictionPolicy_EngineFingerprintSignals/显式配置_→_原样采用\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals/显式配置_→_原样采用","Output":"--- PASS: TestGetCodexRestrictionPolicy_EngineFingerprintSignals/显式配置_→_原样采用 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals/显式配置_→_原样采用","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals/非法JSON_→_回落默认种子"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals/非法JSON_→_回落默认种子","Output":"=== RUN TestGetCodexRestrictionPolicy_EngineFingerprintSignals/非法JSON_→_回落默认种子\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals/非法JSON_→_回落默认种子","Output":"--- PASS: TestGetCodexRestrictionPolicy_EngineFingerprintSignals/非法JSON_→_回落默认种子 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals/非法JSON_→_回落默认种子","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals","Output":"--- PASS: TestGetCodexRestrictionPolicy_EngineFingerprintSignals (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals","Output":"=== RUN TestMigrateCodexBodyFingerprintToSignals\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals/信号键已存在_→_不动"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals/信号键已存在_→_不动","Output":"=== RUN TestMigrateCodexBodyFingerprintToSignals/信号键已存在_→_不动\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals/信号键已存在_→_不动","Output":"--- PASS: TestMigrateCodexBodyFingerprintToSignals/信号键已存在_→_不动 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals/信号键已存在_→_不动","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals/信号键缺失_+_旧body=true_→_写种子且body行Required=true"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals/信号键缺失_+_旧body=true_→_写种子且body行Required=true","Output":"=== RUN TestMigrateCodexBodyFingerprintToSignals/信号键缺失_+_旧body=true_→_写种子且body行Required=true\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals/信号键缺失_+_旧body=true_→_写种子且body行Required=true","Output":"--- PASS: TestMigrateCodexBodyFingerprintToSignals/信号键缺失_+_旧body=true_→_写种子且body行Required=true (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals/信号键缺失_+_旧body=true_→_写种子且body行Required=true","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals/信号键缺失_+_旧body=false/缺_→_写种子(body不勾)"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals/信号键缺失_+_旧body=false/缺_→_写种子(body不勾)","Output":"=== RUN TestMigrateCodexBodyFingerprintToSignals/信号键缺失_+_旧body=false/缺_→_写种子(body不勾)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals/信号键缺失_+_旧body=false/缺_→_写种子(body不勾)","Output":"--- PASS: TestMigrateCodexBodyFingerprintToSignals/信号键缺失_+_旧body=false/缺_→_写种子(body不勾) (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals/信号键缺失_+_旧body=false/缺_→_写种子(body不勾)","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals","Output":"--- PASS: TestMigrateCodexBodyFingerprintToSignals (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexClientEntriesJSON"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexClientEntriesJSON","Output":"=== RUN TestValidateCodexClientEntriesJSON\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexClientEntriesJSON","Output":"--- PASS: TestValidateCodexClientEntriesJSON (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexClientEntriesJSON","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexWhitelistEntriesJSON"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexWhitelistEntriesJSON","Output":"=== RUN TestValidateCodexWhitelistEntriesJSON\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexWhitelistEntriesJSON","Output":"--- PASS: TestValidateCodexWhitelistEntriesJSON (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexWhitelistEntriesJSON","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUpstreamBillingProbeNonOpenAIWithoutBaseURLIsUnsupportedWithoutRequest"}
- {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUpstreamBillingProbeNonOpenAIWithoutBaseURLIsUnsupportedWithoutRequest","Output":"=== RUN TestUpstreamBillingProbeNonOpenAIWithoutBaseURLIsUnsupportedWithoutRequest\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUpstreamBillingProbeNonOpenAIWithoutBaseURLIsUnsupportedWithoutRequest","Output":"--- PASS: TestUpstreamBillingProbeNonOpenAIWithoutBaseURLIsUnsupportedWithoutRequest (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUpstreamBillingProbeNonOpenAIWithoutBaseURLIsUnsupportedWithoutRequest","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUpstreamBillingProbeOpenAIDefaultBaseURLPreserved"}
- {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUpstreamBillingProbeOpenAIDefaultBaseURLPreserved","Output":"=== RUN TestUpstreamBillingProbeOpenAIDefaultBaseURLPreserved\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUpstreamBillingProbeOpenAIDefaultBaseURLPreserved","Output":"--- PASS: TestUpstreamBillingProbeOpenAIDefaultBaseURLPreserved (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUpstreamBillingProbeOpenAIDefaultBaseURLPreserved","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL"}
- {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL","Output":"=== RUN TestBuildOpenAIModelsURL\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL","Output":"=== PAUSE TestBuildOpenAIModelsURL\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL"}
- {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamModelsRequestSupportsOpenAIOAuth"}
- {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamModelsRequestSupportsOpenAIOAuth","Output":"=== RUN TestBuildUpstreamModelsRequestSupportsOpenAIOAuth\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamModelsRequestSupportsOpenAIOAuth","Output":"--- PASS: TestBuildUpstreamModelsRequestSupportsOpenAIOAuth (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamModelsRequestSupportsOpenAIOAuth","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchUpstreamSupportedModelsParsesOpenAIOAuthManifest"}
- {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchUpstreamSupportedModelsParsesOpenAIOAuthManifest","Output":"=== RUN TestFetchUpstreamSupportedModelsParsesOpenAIOAuthManifest\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchUpstreamSupportedModelsParsesOpenAIOAuthManifest","Output":"--- PASS: TestFetchUpstreamSupportedModelsParsesOpenAIOAuthManifest (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchUpstreamSupportedModelsParsesOpenAIOAuthManifest","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchUpstreamSupportedModelsParsesOpenAIResponse"}
- {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchUpstreamSupportedModelsParsesOpenAIResponse","Output":"=== RUN TestFetchUpstreamSupportedModelsParsesOpenAIResponse\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchUpstreamSupportedModelsParsesOpenAIResponse","Output":"=== PAUSE TestFetchUpstreamSupportedModelsParsesOpenAIResponse\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchUpstreamSupportedModelsParsesOpenAIResponse"}
- {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMatchModelsDevProviderFallsBackToOpenAIProviderWithoutAPIField"}
- {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMatchModelsDevProviderFallsBackToOpenAIProviderWithoutAPIField","Output":"=== RUN TestMatchModelsDevProviderFallsBackToOpenAIProviderWithoutAPIField\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMatchModelsDevProviderFallsBackToOpenAIProviderWithoutAPIField","Output":"=== PAUSE TestMatchModelsDevProviderFallsBackToOpenAIProviderWithoutAPIField\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMatchModelsDevProviderFallsBackToOpenAIProviderWithoutAPIField"}
- {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSyncUpstreamModelCatalogEnrichesOfficialOpenAIHostWithoutRegistryAPIField"}
- {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSyncUpstreamModelCatalogEnrichesOfficialOpenAIHostWithoutRegistryAPIField","Output":"=== RUN TestSyncUpstreamModelCatalogEnrichesOfficialOpenAIHostWithoutRegistryAPIField\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSyncUpstreamModelCatalogEnrichesOfficialOpenAIHostWithoutRegistryAPIField","Output":"--- PASS: TestSyncUpstreamModelCatalogEnrichesOfficialOpenAIHostWithoutRegistryAPIField (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSyncUpstreamModelCatalogEnrichesOfficialOpenAIHostWithoutRegistryAPIField","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths","Output":"=== RUN TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/../../x/y"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/../../x/y","Output":"=== RUN TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/../../x/y\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/../../x/y","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/../../x/y (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/../../x/y","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/..%2f..%2fx/y"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/..%2f..%2fx/y","Output":"=== RUN TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/..%2f..%2fx/y\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/..%2f..%2fx/y","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/..%2f..%2fx/y (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/..%2f..%2fx/y","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/%2e%2e/%2e%2e/x"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/%2e%2e/%2e%2e/x","Output":"=== RUN TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/%2e%2e/%2e%2e/x\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/%2e%2e/%2e%2e/x","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/%2e%2e/%2e%2e/x (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/%2e%2e/%2e%2e/x","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//responses/%2e%2e%2fx"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//responses/%2e%2e%2fx","Output":"=== RUN TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//responses/%2e%2e%2fx\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//responses/%2e%2e%2fx","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//responses/%2e%2e%2fx (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//responses/%2e%2e%2fx","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//backend-api/codex/responses/../../../x"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//backend-api/codex/responses/../../../x","Output":"=== RUN TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//backend-api/codex/responses/../../../x\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//backend-api/codex/responses/../../../x","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//backend-api/codex/responses/../../../x (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//backend-api/codex/responses/../../../x","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/..\\..\\x"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/..\\..\\x","Output":"=== RUN TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/..\\..\\x\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/..\\..\\x","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/..\\..\\x (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/..\\..\\x","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/%3fa=b"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/%3fa=b","Output":"=== RUN TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/%3fa=b\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/%3fa=b","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/%3fa=b (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/%3fa=b","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/x%23frag"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/x%23frag","Output":"=== RUN TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/x%23frag\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/x%23frag","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/x%23frag (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/x%23frag","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses//double"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses//double","Output":"=== RUN TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses//double\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses//double","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses//double (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses//double","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/v1/responses/compact"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/v1/responses/compact","Output":"=== RUN TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/v1/responses/compact\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/v1/responses/compact","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/v1/responses/compact (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/v1/responses/compact","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/v1/responses/input_tokens"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/v1/responses/input_tokens","Output":"=== RUN TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/v1/responses/input_tokens\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/v1/responses/input_tokens","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/v1/responses/input_tokens (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/v1/responses/input_tokens","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/responses/compact/"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/responses/compact/","Output":"=== RUN TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/responses/compact/\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/responses/compact/","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/responses/compact/ (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/responses/compact/","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/backend-api/codex/responses/compact"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/backend-api/codex/responses/compact","Output":"=== RUN TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/backend-api/codex/responses/compact\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/backend-api/codex/responses/compact","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/backend-api/codex/responses/compact (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/backend-api/codex/responses/compact","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/v1/responses"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/v1/responses","Output":"=== RUN TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/v1/responses\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/v1/responses","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/v1/responses (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/v1/responses","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesInputTokensRequestPath"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesInputTokensRequestPath","Output":"=== RUN TestIsOpenAIResponsesInputTokensRequestPath\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesInputTokensRequestPath","Output":"--- PASS: TestIsOpenAIResponsesInputTokensRequestPath (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesInputTokensRequestPath","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape","Output":"=== RUN TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/legacy_/v1/responses/compact"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/legacy_/v1/responses/compact","Output":"=== RUN TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/legacy_/v1/responses/compact\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/legacy_/v1/responses/compact","Output":"--- PASS: TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/legacy_/v1/responses/compact (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/legacy_/v1/responses/compact","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/legacy_/v1/responses/compact/detail"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/legacy_/v1/responses/compact/detail","Output":"=== RUN TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/legacy_/v1/responses/compact/detail\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/legacy_/v1/responses/compact/detail","Output":"--- PASS: TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/legacy_/v1/responses/compact/detail (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/legacy_/v1/responses/compact/detail","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/legacy_/responses/compact/"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/legacy_/responses/compact/","Output":"=== RUN TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/legacy_/responses/compact/\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/legacy_/responses/compact/","Output":"--- PASS: TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/legacy_/responses/compact/ (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/legacy_/responses/compact/","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/v1/responses"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/v1/responses","Output":"=== RUN TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/v1/responses\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/v1/responses","Output":"--- PASS: TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/v1/responses (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/v1/responses","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/openai/v1/responses"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/openai/v1/responses","Output":"=== RUN TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/openai/v1/responses\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/openai/v1/responses","Output":"--- PASS: TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/openai/v1/responses (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/openai/v1/responses","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/responses"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/responses","Output":"=== RUN TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/responses\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/responses","Output":"--- PASS: TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/responses (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/responses","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/backend-api/codex/responses"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/backend-api/codex/responses","Output":"=== RUN TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/backend-api/codex/responses\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/backend-api/codex/responses","Output":"--- PASS: TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/backend-api/codex/responses (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/backend-api/codex/responses","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/v1/responses/resp_123/cancel"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/v1/responses/resp_123/cancel","Output":"=== RUN TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/v1/responses/resp_123/cancel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/v1/responses/resp_123/cancel","Output":"--- PASS: TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/v1/responses/resp_123/cancel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/v1/responses/resp_123/cancel","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape","Output":"--- PASS: TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAppendOpenAIResponsesRequestPathSuffixRefusesUnsafeSuffix"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAppendOpenAIResponsesRequestPathSuffixRefusesUnsafeSuffix","Output":"=== RUN TestAppendOpenAIResponsesRequestPathSuffixRefusesUnsafeSuffix\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAppendOpenAIResponsesRequestPathSuffixRefusesUnsafeSuffix","Output":"--- PASS: TestAppendOpenAIResponsesRequestPathSuffixRefusesUnsafeSuffix (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAppendOpenAIResponsesRequestPathSuffixRefusesUnsafeSuffix","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestObserveOpenAISSEBodyIgnoresMalformedPayload"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestObserveOpenAISSEBodyIgnoresMalformedPayload","Output":"=== RUN TestObserveOpenAISSEBodyIgnoresMalformedPayload\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestObserveOpenAISSEBodyIgnoresMalformedPayload","Output":"--- PASS: TestObserveOpenAISSEBodyIgnoresMalformedPayload (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestObserveOpenAISSEBodyIgnoresMalformedPayload","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0963961+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFillsMissingProviderFieldsWithoutOverwritingExplicitMetadata"}
- {"Time":"2026-09-12T11:39:33.0963961+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFillsMissingProviderFieldsWithoutOverwritingExplicitMetadata","Output":"=== CONT TestCompleteAPIKeyCodexModelsManifestForClientFillsMissingProviderFieldsWithoutOverwritingExplicitMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0963961+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsHonorsCustomListAndFinalETag"}
- {"Time":"2026-09-12T11:39:33.0963961+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsHonorsCustomListAndFinalETag","Output":"=== CONT TestMergeGroupConfiguredCodexModelsHonorsCustomListAndFinalETag\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0963961+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIUsage_SparkShadow_WritesExtraAndReturnsNonEmptyWindows"}
- {"Time":"2026-09-12T11:39:33.0963961+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIUsage_SparkShadow_WritesExtraAndReturnsNonEmptyWindows","Output":"=== CONT TestGetOpenAIUsage_SparkShadow_WritesExtraAndReturnsNonEmptyWindows\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0963961+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback"}
- {"Time":"2026-09-12T11:39:33.0963961+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback","Output":"=== CONT TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0963961+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesUltrafastServiceTierForSol"}
- {"Time":"2026-09-12T11:39:33.0963961+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesUltrafastServiceTierForSol","Output":"=== CONT TestBuildCodexModelsManifestAdvertisesUltrafastServiceTierForSol\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0963961+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels"}
- {"Time":"2026-09-12T11:39:33.0963961+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels","Output":"=== CONT TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0963961+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:33.096Z\",\"logger\":\"slog\",\"msg\":\"openai_token_cache_hit\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":100}\n"}
- {"Time":"2026-09-12T11:39:33.0963961+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestKeepsKnownReasoningChoices"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestKeepsKnownReasoningChoices","Output":"=== CONT TestBuildCodexModelsManifestKeepsKnownReasoningChoices\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesSingleNoneReasoningChoiceForCustomModel"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesSingleNoneReasoningChoiceForCustomModel","Output":"=== CONT TestBuildCodexModelsManifestUsesSingleNoneReasoningChoiceForCustomModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesUltrafastServiceTierForSol","Output":"--- PASS: TestBuildCodexModelsManifestAdvertisesUltrafastServiceTierForSol (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesUltrafastServiceTierForSol","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialGrokResponsesImageInput"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialGrokResponsesImageInput","Output":"=== CONT TestBuildCodexModelsManifestForGroupAdvertisesOfficialGrokResponsesImageInput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsHonorsCustomListAndFinalETag","Output":"--- PASS: TestMergeGroupConfiguredCodexModelsHonorsCustomListAndFinalETag (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsHonorsCustomListAndFinalETag","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestOmitsDedicatedImageModels"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestOmitsDedicatedImageModels","Output":"=== CONT TestBuildCodexModelsManifestOmitsDedicatedImageModels\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestKeepsKnownReasoningChoices","Output":"--- PASS: TestBuildCodexModelsManifestKeepsKnownReasoningChoices (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestKeepsKnownReasoningChoices","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIgnoresPersistentlyDisabledMappedAccounts"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIgnoresPersistentlyDisabledMappedAccounts","Output":"=== CONT TestBuildGroupConfiguredCodexModelsManifestIgnoresPersistentlyDisabledMappedAccounts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback","Output":"=== CONT TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesSingleNoneReasoningChoiceForCustomModel","Output":"--- PASS: TestBuildCodexModelsManifestUsesSingleNoneReasoningChoiceForCustomModel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesSingleNoneReasoningChoiceForCustomModel","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsKeepsExplicitAutoReviewSelection"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsKeepsExplicitAutoReviewSelection","Output":"=== CONT TestMergeGroupConfiguredCodexModelsKeepsExplicitAutoReviewSelection\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels","Output":"--- PASS: TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsKeepsExplicitAutoReviewSelection","Output":"--- PASS: TestMergeGroupConfiguredCodexModelsKeepsExplicitAutoReviewSelection (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsKeepsExplicitAutoReviewSelection","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBilling_FastMultiplierOverridesEnforcedRatio"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBilling_FastMultiplierOverridesEnforcedRatio","Output":"=== CONT TestOpenAIFastBilling_FastMultiplierOverridesEnforcedRatio\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAccountMappedAutoReviewByDefault"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAccountMappedAutoReviewByDefault","Output":"=== CONT TestMergeGroupConfiguredCodexModelsFiltersAccountMappedAutoReviewByDefault\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBilling_FastMultiplierOverridesEnforcedRatio","Output":"--- PASS: TestOpenAIFastBilling_FastMultiplierOverridesEnforcedRatio (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBilling_FastMultiplierOverridesEnforcedRatio","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMatchModelsDevProviderFallsBackToOpenAIProviderWithoutAPIField"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMatchModelsDevProviderFallsBackToOpenAIProviderWithoutAPIField","Output":"=== CONT TestMatchModelsDevProviderFallsBackToOpenAIProviderWithoutAPIField\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialGrokResponsesImageInput","Output":"--- PASS: TestBuildCodexModelsManifestForGroupAdvertisesOfficialGrokResponsesImageInput (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialGrokResponsesImageInput","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAutoReviewByDefault"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAutoReviewByDefault","Output":"=== CONT TestMergeGroupConfiguredCodexModelsFiltersAutoReviewByDefault\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchUpstreamSupportedModelsParsesOpenAIResponse"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchUpstreamSupportedModelsParsesOpenAIResponse","Output":"=== CONT TestFetchUpstreamSupportedModelsParsesOpenAIResponse\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestFallsThroughWithoutConfiguration"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestFallsThroughWithoutConfiguration","Output":"=== CONT TestBuildGroupConfiguredCodexModelsManifestFallsThroughWithoutConfiguration\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL","Output":"=== CONT TestBuildOpenAIModelsURL\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies","Output":"=== CONT TestOpenAIWSReplaySequenceSharesBodies\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplatePrependsRenderedInstructions"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplatePrependsRenderedInstructions","Output":"=== CONT TestForwardAsAnthropic_ForcedCodexInstructionsTemplatePrependsRenderedInstructions\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexModelIDsForGroupOmitsWildcardKeys"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexModelIDsForGroupOmitsWildcardKeys","Output":"=== CONT TestFilterCodexModelIDsForGroupOmitsWildcardKeys\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAccountMappedAutoReviewByDefault","Output":"--- PASS: TestMergeGroupConfiguredCodexModelsFiltersAccountMappedAutoReviewByDefault (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAccountMappedAutoReviewByDefault","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupDoesNotAdvertiseNoneWhenAccountReasoningConflicts"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupDoesNotAdvertiseNoneWhenAccountReasoningConflicts","Output":"=== CONT TestBuildCodexModelsManifestForGroupDoesNotAdvertiseNoneWhenAccountReasoningConflicts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMatchModelsDevProviderFallsBackToOpenAIProviderWithoutAPIField","Output":"--- PASS: TestMatchModelsDevProviderFallsBackToOpenAIProviderWithoutAPIField (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMatchModelsDevProviderFallsBackToOpenAIProviderWithoutAPIField","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAutoReviewByDefault","Output":"--- PASS: TestMergeGroupConfiguredCodexModelsFiltersAutoReviewByDefault (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAutoReviewByDefault","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestFallsThroughWithoutConfiguration","Output":"--- PASS: TestBuildGroupConfiguredCodexModelsManifestFallsThroughWithoutConfiguration (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestFallsThroughWithoutConfiguration","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchUpstreamSupportedModelsParsesOpenAIResponse","Output":"--- PASS: TestFetchUpstreamSupportedModelsParsesOpenAIResponse (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchUpstreamSupportedModelsParsesOpenAIResponse","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupKeepsCrossPlatformAliasAmbiguityClosed"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupKeepsCrossPlatformAliasAmbiguityClosed","Output":"=== CONT TestBuildCodexModelsManifestForGroupKeepsCrossPlatformAliasAmbiguityClosed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexModelIDsForGroupOmitsWildcardKeys","Output":"--- PASS: TestFilterCodexModelIDsForGroupOmitsWildcardKeys (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexModelIDsForGroupOmitsWildcardKeys","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCombineOpenAIWSReplayItems"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCombineOpenAIWSReplayItems","Output":"=== CONT TestCombineOpenAIWSReplayItems\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField","Output":"=== CONT TestValidateOpenAIServiceTierField\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback","Output":"--- PASS: TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCombineOpenAIWSReplayItems/empty_delta_returns_history"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCombineOpenAIWSReplayItems/empty_delta_returns_history","Output":"=== RUN TestCombineOpenAIWSReplayItems/empty_delta_returns_history\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIWSPayloadInputSequence"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIWSPayloadInputSequence","Output":"=== CONT TestSetOpenAIWSPayloadInputSequence\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestOmitsDedicatedImageModels","Output":"--- PASS: TestBuildCodexModelsManifestOmitsDedicatedImageModels (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestOmitsDedicatedImageModels","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIWSPayloadInputSequence/set_items"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIWSPayloadInputSequence/set_items","Output":"=== RUN TestSetOpenAIWSPayloadInputSequence/set_items\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFillsMissingProviderFieldsWithoutOverwritingExplicitMetadata","Output":"--- PASS: TestCompleteAPIKeyCodexModelsManifestForClientFillsMissingProviderFieldsWithoutOverwritingExplicitMetadata (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFillsMissingProviderFieldsWithoutOverwritingExplicitMetadata","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios","Output":"=== CONT TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIgnoresPersistentlyDisabledMappedAccounts","Output":"--- PASS: TestBuildGroupConfiguredCodexModelsManifestIgnoresPersistentlyDisabledMappedAccounts (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIgnoresPersistentlyDisabledMappedAccounts","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus","Output":"=== CONT TestIsRetryableCodexModelsManifestStatus\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupKeepsCrossPlatformAliasAmbiguityClosed","Output":"--- PASS: TestBuildCodexModelsManifestForGroupKeepsCrossPlatformAliasAmbiguityClosed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupKeepsCrossPlatformAliasAmbiguityClosed","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.5_catalog_2x_priority_is_corrected_to_2.5x"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.5_catalog_2x_priority_is_corrected_to_2.5x","Output":"=== RUN TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.5_catalog_2x_priority_is_corrected_to_2.5x\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage","Output":"=== CONT TestOpenAIWSStateStoreInvalidEncryptedContentLineage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIWSPayloadInputSequence/set_items","Output":"--- PASS: TestSetOpenAIWSPayloadInputSequence/set_items (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIWSPayloadInputSequence/set_items","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupLoadsAccountsOnce"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupLoadsAccountsOnce","Output":"=== CONT TestBuildCodexModelsManifestForGroupLoadsAccountsOnce\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.5_catalog_2x_priority_is_corrected_to_2.5x","Output":"--- PASS: TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.5_catalog_2x_priority_is_corrected_to_2.5x (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.5_catalog_2x_priority_is_corrected_to_2.5x","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupDoesNotAdvertiseNoneWhenAccountReasoningConflicts","Output":"--- PASS: TestBuildCodexModelsManifestForGroupDoesNotAdvertiseNoneWhenAccountReasoningConflicts (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupDoesNotAdvertiseNoneWhenAccountReasoningConflicts","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_404"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_404","Output":"=== RUN TestIsRetryableCodexModelsManifestStatus/api_key_404\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIWSPayloadInputSequence/preserve_empty_array_not_null"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIWSPayloadInputSequence/preserve_empty_array_not_null","Output":"=== RUN TestSetOpenAIWSPayloadInputSequence/preserve_empty_array_not_null\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_404","Output":"=== PAUSE TestIsRetryableCodexModelsManifestStatus/api_key_404\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_404"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput","Output":"=== CONT TestOpenAIWSRawPayloadHasToolCallOutput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/mark_get_roundtrip_with_merge"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/mark_get_roundtrip_with_merge","Output":"=== RUN TestOpenAIWSStateStoreInvalidEncryptedContentLineage/mark_get_roundtrip_with_merge\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIWSPayloadInputSequence/preserve_empty_array_not_null","Output":"--- PASS: TestSetOpenAIWSPayloadInputSequence/preserve_empty_array_not_null (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIWSPayloadInputSequence/preserve_empty_array_not_null","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIWSPayloadInputSequence","Output":"--- PASS: TestSetOpenAIWSPayloadInputSequence (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIWSPayloadInputSequence","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_405"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_405","Output":"=== RUN TestIsRetryableCodexModelsManifestStatus/api_key_405\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentRaw"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentRaw","Output":"=== CONT TestStripOpenAIInvalidEncryptedContentRaw\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.4_keeps_2x"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.4_keeps_2x","Output":"=== RUN TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.4_keeps_2x\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_405","Output":"=== PAUSE TestIsRetryableCodexModelsManifestStatus/api_key_405\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_405"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesMappedTargetMetadataForCompositeAlias"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesMappedTargetMetadataForCompositeAlias","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesMappedTargetMetadataForCompositeAlias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.4_keeps_2x","Output":"--- PASS: TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.4_keeps_2x (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.4_keeps_2x","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_404"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_404","Output":"=== RUN TestIsRetryableCodexModelsManifestStatus/oauth_404\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.6_family_keeps_2x"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.6_family_keeps_2x","Output":"=== RUN TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.6_family_keeps_2x\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_404","Output":"=== PAUSE TestIsRetryableCodexModelsManifestStatus/oauth_404\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_404"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_405"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_405","Output":"=== RUN TestIsRetryableCodexModelsManifestStatus/oauth_405\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.6_family_keeps_2x","Output":"--- PASS: TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.6_family_keeps_2x (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.6_family_keeps_2x","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_405","Output":"=== PAUSE TestIsRetryableCodexModelsManifestStatus/oauth_405\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_405"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesAccountMappingOwnershipAndMappedModel"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesAccountMappingOwnershipAndMappedModel","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesAccountMappingOwnershipAndMappedModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesExplicitCompositeResponsesRouteModel"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesExplicitCompositeResponsesRouteModel","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesExplicitCompositeResponsesRouteModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackToSchedulableWhenAvailabilityLookupFails"}
- {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackToSchedulableWhenAvailabilityLookupFails","Output":"=== CONT TestBuildCodexModelsManifestForGroupFallsBackToSchedulableWhenAvailabilityLookupFails\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentRaw/miss_fast_path_returns_original"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentRaw/miss_fast_path_returns_original","Output":"=== RUN TestStripOpenAIInvalidEncryptedContentRaw/miss_fast_path_returns_original\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentRaw/miss_fast_path_returns_original","Output":"=== PAUSE TestStripOpenAIInvalidEncryptedContentRaw/miss_fast_path_returns_original\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentRaw/miss_fast_path_returns_original"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence","Output":"=== CONT TestBuildOpenAIWSReplayInputSequence\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities","Output":"=== CONT TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/no_previous_response_id_use_current"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/no_previous_response_id_use_current","Output":"=== RUN TestBuildOpenAIWSReplayInputSequence/no_previous_response_id_use_current\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_text-only_snapshot_narrows_local_fallback"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_text-only_snapshot_narrows_local_fallback","Output":"=== RUN TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_text-only_snapshot_narrows_local_fallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/no_previous_response_id_use_current","Output":"--- PASS: TestBuildOpenAIWSReplayInputSequence/no_previous_response_id_use_current (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/no_previous_response_id_use_current","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_text-only_snapshot_narrows_local_fallback","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_text-only_snapshot_narrows_local_fallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_text-only_snapshot_narrows_local_fallback"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_multimodal_snapshot_preserves_local_fallback"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_multimodal_snapshot_preserves_local_fallback","Output":"=== RUN TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_multimodal_snapshot_preserves_local_fallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_multimodal_snapshot_preserves_local_fallback","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_multimodal_snapshot_preserves_local_fallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_multimodal_snapshot_preserves_local_fallback"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSJSONForCompare"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSJSONForCompare","Output":"=== CONT TestNormalizeOpenAIWSJSONForCompare\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.6"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.6","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.6\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsTransientlyUnschedulableMappedAccounts"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsTransientlyUnschedulableMappedAccounts","Output":"=== CONT TestBuildCodexModelsManifestForGroupIntersectsTransientlyUnschedulableMappedAccounts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIEncryptedContentDigestsRaw"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIEncryptedContentDigestsRaw","Output":"=== CONT TestCollectOpenAIEncryptedContentDigestsRaw\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended","Output":"=== CONT TestOpenAIWSInputIsPrefixExtended\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL","Output":"=== CONT TestBuildOpenAIEmbeddingsURL\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsDifferentMappedTargetsWithoutLeakingAlias"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsDifferentMappedTargetsWithoutLeakingAlias","Output":"=== CONT TestBuildCodexModelsManifestForGroupIntersectsDifferentMappedTargetsWithoutLeakingAlias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/both_missing_input"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/both_missing_input","Output":"=== RUN TestOpenAIWSInputIsPrefixExtended/both_missing_input\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/both_missing_input","Output":"=== PAUSE TestOpenAIWSInputIsPrefixExtended/both_missing_input\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/both_missing_input"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSIngressPreviousResponseRecoveryEnabled"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSIngressPreviousResponseRecoveryEnabled","Output":"=== CONT TestOpenAIWSIngressPreviousResponseRecoveryEnabled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_missing_current_empty_array"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_missing_current_empty_array","Output":"=== RUN TestOpenAIWSInputIsPrefixExtended/previous_missing_current_empty_array\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplateUsesCachedTemplateContent"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplateUsesCachedTemplateContent","Output":"=== CONT TestForwardAsAnthropic_ForcedCodexInstructionsTemplateUsesCachedTemplateContent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/bare_domain"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/bare_domain","Output":"=== RUN TestBuildOpenAIEmbeddingsURL/bare_domain\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSIngressPreviousResponseNotFound"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSIngressPreviousResponseNotFound","Output":"=== CONT TestIsOpenAIWSIngressPreviousResponseNotFound\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyGrokImagineImageGeometryMapsOpenAISize"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyGrokImagineImageGeometryMapsOpenAISize","Output":"=== CONT TestApplyGrokImagineImageGeometryMapsOpenAISize\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/bare_domain","Output":"=== PAUSE TestBuildOpenAIEmbeddingsURL/bare_domain\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/bare_domain"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/bare_/v1"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/bare_/v1","Output":"=== RUN TestBuildOpenAIEmbeddingsURL/bare_/v1\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/bare_/v1","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:33.097Z\",\"msg\":\"openai messages: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"original_model\":\"gpt-5.4\",\"normalized_model\":\"gpt-5.4\",\"billing_model\":\"gpt-5.1\",\"upstream_model\":\"gpt-5.4\",\"stream\":true,\"compat_prompt_cache_key_injected\":true,\"compat_prompt_cache_key_sha256\":\"c8b82dd52b41c996\"}\n"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/bare_/v1","Output":"=== PAUSE TestBuildOpenAIEmbeddingsURL/bare_/v1\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/bare_/v1"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata","Output":"=== CONT TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:33.097Z\",\"msg\":\"openai messages: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"original_model\":\"gpt-5.4\",\"normalized_model\":\"gpt-5.4\",\"billing_model\":\"gpt-5.1\",\"upstream_model\":\"gpt-5.4\",\"stream\":true,\"compat_prompt_cache_key_injected\":true,\"compat_prompt_cache_key_sha256\":\"c8b82dd52b41c996\"}\n"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialOpenAIResponsesImageInput"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialOpenAIResponsesImageInput","Output":"=== CONT TestBuildCodexModelsManifestForGroupAdvertisesOfficialOpenAIResponsesImageInput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed","Output":"=== CONT TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesSyncedMetadataForConvertedModelList"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesSyncedMetadataForConvertedModelList","Output":"=== CONT TestCompleteAPIKeyCodexModelsManifestForClientUsesSyncedMetadataForConvertedModelList\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/zhipu_v4_coding_base_url"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/zhipu_v4_coding_base_url","Output":"=== RUN TestBuildOpenAIModelsURL/zhipu_v4_coding_base_url\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/zhipu_v4_coding_base_url","Output":"=== PAUSE TestBuildOpenAIModelsURL/zhipu_v4_coding_base_url\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/zhipu_v4_coding_base_url"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/openai_v1_base_url"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/openai_v1_base_url","Output":"=== RUN TestBuildOpenAIModelsURL/openai_v1_base_url\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/openai_v1_base_url","Output":"=== PAUSE TestBuildOpenAIModelsURL/openai_v1_base_url\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/openai_v1_base_url"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/models_url_unchanged"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/models_url_unchanged","Output":"=== RUN TestBuildOpenAIModelsURL/models_url_unchanged\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/models_url_unchanged","Output":"=== PAUSE TestBuildOpenAIModelsURL/models_url_unchanged\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/models_url_unchanged"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/host_fallback_uses_v1"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/host_fallback_uses_v1","Output":"=== RUN TestBuildOpenAIModelsURL/host_fallback_uses_v1\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/host_fallback_uses_v1","Output":"=== PAUSE TestBuildOpenAIModelsURL/host_fallback_uses_v1\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/host_fallback_uses_v1"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_missing_current_empty_array","Output":"=== PAUSE TestOpenAIWSInputIsPrefixExtended/previous_missing_current_empty_array\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_missing_current_empty_array"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_missing_current_non_empty_array"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_missing_current_non_empty_array","Output":"=== RUN TestOpenAIWSInputIsPrefixExtended/previous_missing_current_non_empty_array\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_missing_current_non_empty_array","Output":"=== PAUSE TestOpenAIWSInputIsPrefixExtended/previous_missing_current_non_empty_array\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_missing_current_non_empty_array"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:33.097Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_match"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_match","Output":"=== RUN TestOpenAIWSInputIsPrefixExtended/array_prefix_match\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_match","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:33.097Z\",\"msg\":\"openai messages: upstream identity restored\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"upstream_model\":\"gpt-5.4\",\"compat_identity_restored\":true}\n"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_match","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:33.097Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_match","Output":"=== PAUSE TestOpenAIWSInputIsPrefixExtended/array_prefix_match\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_match"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_match","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:33.097Z\",\"msg\":\"openai messages: upstream identity restored\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"upstream_model\":\"gpt-5.4\",\"compat_identity_restored\":true}\n"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_mismatch"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_mismatch","Output":"=== RUN TestOpenAIWSInputIsPrefixExtended/array_prefix_mismatch\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_mismatch","Output":"=== PAUSE TestOpenAIWSInputIsPrefixExtended/array_prefix_mismatch\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_mismatch"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/current_shorter_than_previous"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/current_shorter_than_previous","Output":"=== RUN TestOpenAIWSInputIsPrefixExtended/current_shorter_than_previous\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/current_shorter_than_previous","Output":"=== PAUSE TestOpenAIWSInputIsPrefixExtended/current_shorter_than_previous\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/current_shorter_than_previous"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_has_input_current_missing"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_has_input_current_missing","Output":"=== RUN TestOpenAIWSInputIsPrefixExtended/previous_has_input_current_missing\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/trailing_slash_on_v4"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/trailing_slash_on_v4","Output":"=== RUN TestBuildOpenAIModelsURL/trailing_slash_on_v4\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestLeavesServiceTiersEmptyForOtherModels"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestLeavesServiceTiersEmptyForOtherModels","Output":"=== CONT TestBuildCodexModelsManifestLeavesServiceTiersEmptyForOtherModels\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/trailing_slash_on_v4","Output":"=== PAUSE TestBuildOpenAIModelsURL/trailing_slash_on_v4\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/trailing_slash_on_v4"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientPreservesProviderMetadata"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientPreservesProviderMetadata","Output":"=== CONT TestCompleteAPIKeyCodexModelsManifestForClientPreservesProviderMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCombineOpenAIWSReplayItems/empty_delta_returns_history","Output":"--- PASS: TestCombineOpenAIWSReplayItems/empty_delta_returns_history (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCombineOpenAIWSReplayItems/empty_delta_returns_history","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/fast_normalizes_to_priority"}
- {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/fast_normalizes_to_priority","Output":"=== RUN TestValidateOpenAIServiceTierField/fast_normalizes_to_priority\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupOmitsDedicatedMediaTargetAlias"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupOmitsDedicatedMediaTargetAlias","Output":"=== CONT TestBuildCodexModelsManifestForGroupOmitsDedicatedMediaTargetAlias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/fast_normalizes_to_priority","Output":"--- PASS: TestValidateOpenAIServiceTierField/fast_normalizes_to_priority (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/fast_normalizes_to_priority","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSafeFallbackForConflictingAliasTargets"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSafeFallbackForConflictingAliasTargets","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesSafeFallbackForConflictingAliasTargets\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier","Output":"=== CONT TestResolvedOpenAIUpstreamServiceTier\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/upstream_echo_stays_separate_from_outbound_tier"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/upstream_echo_stays_separate_from_outbound_tier","Output":"=== RUN TestResolvedOpenAIUpstreamServiceTier/upstream_echo_stays_separate_from_outbound_tier\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/upstream_echo_stays_separate_from_outbound_tier","Output":"--- PASS: TestResolvedOpenAIUpstreamServiceTier/upstream_echo_stays_separate_from_outbound_tier (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/upstream_echo_stays_separate_from_outbound_tier","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/function_call_output"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/function_call_output","Output":"=== RUN TestOpenAIWSRawPayloadHasToolCallOutput/function_call_output\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/mark_get_roundtrip_with_merge","Output":"=== PAUSE TestOpenAIWSStateStoreInvalidEncryptedContentLineage/mark_get_roundtrip_with_merge\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/mark_get_roundtrip_with_merge"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/function_call_output","Output":"=== PAUSE TestOpenAIWSRawPayloadHasToolCallOutput/function_call_output\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/function_call_output"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/missing_priority_prices_are_backfilled_from_standard"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/missing_priority_prices_are_backfilled_from_standard","Output":"=== RUN TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/missing_priority_prices_are_backfilled_from_standard\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIgnoresPersistentlyDisabledMappedAccounts"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIgnoresPersistentlyDisabledMappedAccounts","Output":"=== CONT TestBuildCodexModelsManifestForGroupIgnoresPersistentlyDisabledMappedAccounts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesMappedTargetMetadataForCompositeAlias","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesMappedTargetMetadataForCompositeAlias (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesMappedTargetMetadataForCompositeAlias","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems","Output":"=== CONT TestStripOpenAIInvalidEncryptedContentFromReplayItems\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence","Output":"=== CONT TestOpenAIWSExtractNormalizedInputSequence\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/expired_binding_not_returned"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/expired_binding_not_returned","Output":"=== RUN TestOpenAIWSStateStoreInvalidEncryptedContentLineage/expired_binding_not_returned\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/expired_binding_not_returned","Output":"=== PAUSE TestOpenAIWSStateStoreInvalidEncryptedContentLineage/expired_binding_not_returned\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/expired_binding_not_returned"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIUsage_SparkShadow_WritesExtraAndReturnsNonEmptyWindows","Output":"--- PASS: TestGetOpenAIUsage_SparkShadow_WritesExtraAndReturnsNonEmptyWindows (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIUsage_SparkShadow_WritesExtraAndReturnsNonEmptyWindows","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackToSchedulableWhenAvailabilityLookupFails","Output":"--- PASS: TestBuildCodexModelsManifestForGroupFallsBackToSchedulableWhenAvailabilityLookupFails (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackToSchedulableWhenAvailabilityLookupFails","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupLoadsAccountsOnce","Output":"--- PASS: TestBuildCodexModelsManifestForGroupLoadsAccountsOnce (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupLoadsAccountsOnce","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSJSONForCompare","Output":"--- PASS: TestNormalizeOpenAIWSJSONForCompare (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSJSONForCompare","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesExplicitCompositeResponsesRouteModel","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesExplicitCompositeResponsesRouteModel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesExplicitCompositeResponsesRouteModel","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesAccountMappingOwnershipAndMappedModel","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesAccountMappingOwnershipAndMappedModel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesAccountMappingOwnershipAndMappedModel","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIEncryptedContentDigestsRaw","Output":"--- PASS: TestCollectOpenAIEncryptedContentDigestsRaw (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIEncryptedContentDigestsRaw","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback","Output":"--- PASS: TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPreservesCompatibleAstraTextOnlyMetadata"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPreservesCompatibleAstraTextOnlyMetadata","Output":"=== CONT TestBuildCodexModelsManifestForGroupPreservesCompatibleAstraTextOnlyMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSIngressPreviousResponseRecoveryEnabled","Output":"--- PASS: TestOpenAIWSIngressPreviousResponseRecoveryEnabled (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSIngressPreviousResponseRecoveryEnabled","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSIngressPreviousResponseNotFound","Output":"--- PASS: TestIsOpenAIWSIngressPreviousResponseNotFound (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSIngressPreviousResponseNotFound","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyGrokImagineImageGeometryMapsOpenAISize","Output":"--- PASS: TestApplyGrokImagineImageGeometryMapsOpenAISize (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyGrokImagineImageGeometryMapsOpenAISize","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsDifferentMappedTargetsWithoutLeakingAlias","Output":"--- PASS: TestBuildCodexModelsManifestForGroupIntersectsDifferentMappedTargetsWithoutLeakingAlias (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsDifferentMappedTargetsWithoutLeakingAlias","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata","Output":"--- PASS: TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialOpenAIResponsesImageInput","Output":"--- PASS: TestBuildCodexModelsManifestForGroupAdvertisesOfficialOpenAIResponsesImageInput (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialOpenAIResponsesImageInput","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsTransientlyUnschedulableMappedAccounts","Output":"--- PASS: TestBuildCodexModelsManifestForGroupIntersectsTransientlyUnschedulableMappedAccounts (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsTransientlyUnschedulableMappedAccounts","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupOmitsDedicatedMediaTargetAlias","Output":"--- PASS: TestBuildCodexModelsManifestForGroupOmitsDedicatedMediaTargetAlias (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupOmitsDedicatedMediaTargetAlias","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplateUsesCachedTemplateContent","Output":"--- PASS: TestForwardAsAnthropic_ForcedCodexInstructionsTemplateUsesCachedTemplateContent (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplateUsesCachedTemplateContent","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/empty_payload"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/empty_payload","Output":"=== RUN TestOpenAIWSExtractNormalizedInputSequence/empty_payload\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/no_upstream_echo_falls_back_to_outbound_tier"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/no_upstream_echo_falls_back_to_outbound_tier","Output":"=== RUN TestResolvedOpenAIUpstreamServiceTier/no_upstream_echo_falls_back_to_outbound_tier\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/no_upstream_echo_falls_back_to_outbound_tier","Output":"--- PASS: TestResolvedOpenAIUpstreamServiceTier/no_upstream_echo_falls_back_to_outbound_tier (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/no_upstream_echo_falls_back_to_outbound_tier","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/empty_payload","Output":"--- PASS: TestOpenAIWSExtractNormalizedInputSequence/empty_payload (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/empty_payload","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSafeFallbackForConflictingAliasTargets","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesSafeFallbackForConflictingAliasTargets (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSafeFallbackForConflictingAliasTargets","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/observed_tier_never_promotes_an_untiered_request"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/observed_tier_never_promotes_an_untiered_request","Output":"=== RUN TestResolvedOpenAIUpstreamServiceTier/observed_tier_never_promotes_an_untiered_request\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems/rewrites_hit_items_and_shares_the_rest"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems/rewrites_hit_items_and_shares_the_rest","Output":"=== RUN TestStripOpenAIInvalidEncryptedContentFromReplayItems/rewrites_hit_items_and_shares_the_rest\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/observed_tier_never_promotes_an_untiered_request","Output":"--- PASS: TestResolvedOpenAIUpstreamServiceTier/observed_tier_never_promotes_an_untiered_request (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/observed_tier_never_promotes_an_untiered_request","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems/rewrites_hit_items_and_shares_the_rest","Output":"=== PAUSE TestStripOpenAIInvalidEncryptedContentFromReplayItems/rewrites_hit_items_and_shares_the_rest\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems/rewrites_hit_items_and_shares_the_rest"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/per_session_capacity_degrades_gracefully"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/per_session_capacity_degrades_gracefully","Output":"=== RUN TestOpenAIWSStateStoreInvalidEncryptedContentLineage/per_session_capacity_degrades_gracefully\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/per_session_capacity_degrades_gracefully","Output":"=== PAUSE TestOpenAIWSStateStoreInvalidEncryptedContentLineage/per_session_capacity_degrades_gracefully\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/per_session_capacity_degrades_gracefully"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_missing"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_missing","Output":"=== RUN TestOpenAIWSExtractNormalizedInputSequence/input_missing\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/no_previous_response_id_custom_tool_history_does_not_accumulate"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/no_previous_response_id_custom_tool_history_does_not_accumulate","Output":"=== RUN TestBuildOpenAIWSReplayInputSequence/no_previous_response_id_custom_tool_history_does_not_accumulate\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSJSONForCompareOrRaw"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSJSONForCompareOrRaw","Output":"=== CONT TestNormalizeOpenAIWSJSONForCompareOrRaw\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/no_observer_keeps_outbound_tier"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/no_observer_keeps_outbound_tier","Output":"=== RUN TestResolvedOpenAIUpstreamServiceTier/no_observer_keeps_outbound_tier\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_missing","Output":"--- PASS: TestOpenAIWSExtractNormalizedInputSequence/input_missing (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_missing","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/no_previous_response_id_custom_tool_history_does_not_accumulate","Output":"--- PASS: TestBuildOpenAIWSReplayInputSequence/no_previous_response_id_custom_tool_history_does_not_accumulate (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/no_previous_response_id_custom_tool_history_does_not_accumulate","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.6","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.6\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.6"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems","Output":"=== CONT TestStripOpenAIInvalidEncryptedContentItems\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError","Output":"=== CONT TestIsOpenAIWSClientDisconnectError\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x","Output":"=== CONT TestOpenAIFastBillingMultiplier_2xAnd25x\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/only_strips_matching_items"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/only_strips_matching_items","Output":"=== RUN TestStripOpenAIInvalidEncryptedContentItems/only_strips_matching_items\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies/extract_shares_payload_backing_array"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies/extract_shares_payload_backing_array","Output":"=== RUN TestOpenAIWSReplaySequenceSharesBodies/extract_shares_payload_backing_array\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/only_strips_matching_items","Output":"=== PAUSE TestStripOpenAIInvalidEncryptedContentItems/only_strips_matching_items\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/only_strips_matching_items"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/compaction_removed_entirely"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/compaction_removed_entirely","Output":"=== RUN TestStripOpenAIInvalidEncryptedContentItems/compaction_removed_entirely\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes","Output":"=== CONT TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_Build_vision_host"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_Build_vision_host","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_Build_vision_host\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies/extract_shares_payload_backing_array","Output":"--- PASS: TestOpenAIWSReplaySequenceSharesBodies/extract_shares_payload_backing_array (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies/extract_shares_payload_backing_array","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_Build_vision_host","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_Build_vision_host\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_Build_vision_host"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/nil"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/nil","Output":"=== RUN TestIsOpenAIWSClientDisconnectError/nil\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSEventShouldParseUsageTerminalEvents"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSEventShouldParseUsageTerminalEvents","Output":"=== CONT TestOpenAIWSEventShouldParseUsageTerminalEvents\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/nil","Output":"=== PAUSE TestIsOpenAIWSClientDisconnectError/nil\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/nil"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.20_vision_model"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.20_vision_model","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.20_vision_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.20_vision_model","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.20_vision_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.20_vision_model"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeGroupMessagesDispatchFields_ClearsNonOpenAIPlatform"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeGroupMessagesDispatchFields_ClearsNonOpenAIPlatform","Output":"=== CONT TestSanitizeGroupMessagesDispatchFields_ClearsNonOpenAIPlatform\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFiltersOfficialNonAgentModels"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFiltersOfficialNonAgentModels","Output":"=== CONT TestCompleteAPIKeyCodexModelsManifestForClientFiltersOfficialNonAgentModels\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/chat_bridge"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/chat_bridge","Output":"=== RUN TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/chat_bridge\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatPreviousResponseUnavailableRecognitionIsStrict"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatPreviousResponseUnavailableRecognitionIsStrict","Output":"=== CONT TestOpenAICompatPreviousResponseUnavailableRecognitionIsStrict\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ReusesOAuthCodexTurnState"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ReusesOAuthCodexTurnState","Output":"=== CONT TestForwardAsAnthropic_ReusesOAuthCodexTurnState\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_TrimsFullReplayOnlyForCodexCompatModels"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_TrimsFullReplayOnlyForCodexCompatModels","Output":"=== CONT TestForwardAsAnthropic_TrimsFullReplayOnlyForCodexCompatModels\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIMessagesDispatchModelConfig"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIMessagesDispatchModelConfig","Output":"=== CONT TestNormalizeOpenAIMessagesDispatchModelConfig\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_has_input_current_missing","Output":"=== PAUSE TestOpenAIWSInputIsPrefixExtended/previous_has_input_current_missing\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_has_input_current_missing"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/v2_base_url"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/v2_base_url","Output":"=== RUN TestBuildOpenAIModelsURL/v2_base_url\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel","Output":"=== CONT TestNormalizeOpenAICompatRequestedModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/input_string_treated_as_single_item"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/input_string_treated_as_single_item","Output":"=== RUN TestOpenAIWSInputIsPrefixExtended/input_string_treated_as_single_item\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/input_string_treated_as_single_item","Output":"=== PAUSE TestOpenAIWSInputIsPrefixExtended/input_string_treated_as_single_item\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/input_string_treated_as_single_item"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:33.098Z\",\"msg\":\"openai messages: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"original_model\":\"claude-sonnet-4-5\",\"normalized_model\":\"claude-sonnet-4-5\",\"billing_model\":\"gpt-5.4\",\"upstream_model\":\"gpt-5.4\",\"stream\":true}\n"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/v2_base_url","Output":"=== PAUSE TestBuildOpenAIModelsURL/v2_base_url\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/v2_base_url"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:33.098Z\",\"msg\":\"openai messages: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"original_model\":\"claude-sonnet-4-5\",\"normalized_model\":\"claude-sonnet-4-5\",\"billing_model\":\"gpt-5.3-codex\",\"upstream_model\":\"gpt-5.3-codex\",\"stream\":true,\"compat_prompt_cache_key_injected\":true,\"compat_prompt_cache_key_sha256\":\"e8bf3c701e17d12d\",\"compat_full_replay_trimmed\":true,\"compat_messages_after_trim\":12}\n"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/v3_base_url"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/v3_base_url","Output":"=== RUN TestBuildOpenAIModelsURL/v3_base_url\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/v3_base_url","Output":"=== PAUSE TestBuildOpenAIModelsURL/v3_base_url\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/v3_base_url"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCompleteCodexManifest"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCompleteCodexManifest","Output":"=== CONT TestConvertOpenAIModelListToCompleteCodexManifest\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/tool_search_output"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/tool_search_output","Output":"=== RUN TestOpenAIWSRawPayloadHasToolCallOutput/tool_search_output\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/tool_search_output","Output":"=== PAUSE TestOpenAIWSRawPayloadHasToolCallOutput/tool_search_output\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/tool_search_output"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/custom_tool_call_output"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/custom_tool_call_output","Output":"=== RUN TestOpenAIWSRawPayloadHasToolCallOutput/custom_tool_call_output\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/custom_tool_call_output","Output":"=== PAUSE TestOpenAIWSRawPayloadHasToolCallOutput/custom_tool_call_output\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/custom_tool_call_output"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/mcp_tool_call_output"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/mcp_tool_call_output","Output":"=== RUN TestOpenAIWSRawPayloadHasToolCallOutput/mcp_tool_call_output\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/mcp_tool_call_output","Output":"=== PAUSE TestOpenAIWSRawPayloadHasToolCallOutput/mcp_tool_call_output\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/mcp_tool_call_output"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/object_input"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/object_input","Output":"=== RUN TestOpenAIWSRawPayloadHasToolCallOutput/object_input\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/object_input","Output":"=== PAUSE TestOpenAIWSRawPayloadHasToolCallOutput/object_input\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/object_input"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/non_tool_output"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/non_tool_output","Output":"=== RUN TestOpenAIWSRawPayloadHasToolCallOutput/non_tool_output\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/non_tool_output","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:33.098Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/non_tool_output","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:33.098Z\",\"msg\":\"openai messages: upstream identity restored\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"upstream_model\":\"gpt-5.4\",\"compat_identity_restored\":true}\n"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestUsesAdministratorConfiguration"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestUsesAdministratorConfiguration","Output":"=== CONT TestBuildGroupConfiguredCodexModelsManifestUsesAdministratorConfiguration\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/non_tool_output","Output":"=== PAUSE TestOpenAIWSRawPayloadHasToolCallOutput/non_tool_output\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/non_tool_output"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSPayloadWithoutInputAndPreviousResponseID"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSPayloadWithoutInputAndPreviousResponseID","Output":"=== CONT TestNormalizeOpenAIWSPayloadWithoutInputAndPreviousResponseID\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSPayloadWithoutInputAndPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:33.098Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSPayloadWithoutInputAndPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:33.098Z\",\"msg\":\"openai messages: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"original_model\":\"claude-sonnet-4-5\",\"normalized_model\":\"claude-sonnet-4-5\",\"billing_model\":\"gpt-5.4\",\"upstream_model\":\"gpt-5.4\",\"stream\":true}\n"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientMarksOnlyOfficialVisionGPTImageInput"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientMarksOnlyOfficialVisionGPTImageInput","Output":"=== CONT TestCompleteAPIKeyCodexModelsManifestForClientMarksOnlyOfficialVisionGPTImageInput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCombineOpenAIWSReplayItems/new_header_shares_bodies"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCombineOpenAIWSReplayItems/new_header_shares_bodies","Output":"=== RUN TestCombineOpenAIWSReplayItems/new_header_shares_bodies\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestExpandsSelectedModelCoveredByWildcardMapping"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestExpandsSelectedModelCoveredByWildcardMapping","Output":"=== CONT TestBuildGroupConfiguredCodexModelsManifestExpandsSelectedModelCoveredByWildcardMapping\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCombineOpenAIWSReplayItems/new_header_shares_bodies","Output":"--- PASS: TestCombineOpenAIWSReplayItems/new_header_shares_bodies (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCombineOpenAIWSReplayItems/new_header_shares_bodies","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts","Output":"=== CONT TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:33.098Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:33.098Z\",\"msg\":\"openai messages: upstream identity restored\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"upstream_model\":\"gpt-5.4\",\"compat_identity_restored\":true}\n"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_PersistOpenAICodexProbeSnapshotOnlyUpdatesExtra"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_PersistOpenAICodexProbeSnapshotOnlyUpdatesExtra","Output":"=== CONT TestAccountUsageService_PersistOpenAICodexProbeSnapshotOnlyUpdatesExtra\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems/miss_returns_original_header"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems/miss_returns_original_header","Output":"=== RUN TestStripOpenAIInvalidEncryptedContentFromReplayItems/miss_returns_original_header\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow","Output":"=== CONT TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems/miss_returns_original_header","Output":"=== PAUSE TestStripOpenAIInvalidEncryptedContentFromReplayItems/miss_returns_original_header\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems/miss_returns_original_header"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot_SparkShadowIgnoresWSv2"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot_SparkShadowIgnoresWSv2","Output":"=== CONT TestShouldRefreshOpenAICodexSnapshot_SparkShadowIgnoresWSv2\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/expired_5h_window_zeroes_utilization"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/expired_5h_window_zeroes_utilization","Output":"=== RUN TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/expired_5h_window_zeroes_utilization\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_GetOpenAIUsage_DoesNotPromoteCodexExtraToRateLimit"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_GetOpenAIUsage_DoesNotPromoteCodexExtraToRateLimit","Output":"=== CONT TestAccountUsageService_GetOpenAIUsage_DoesNotPromoteCodexExtraToRateLimit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/expired_5h_window_zeroes_utilization","Output":"--- PASS: TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/expired_5h_window_zeroes_utilization (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/expired_5h_window_zeroes_utilization","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:33.098Z\",\"msg\":\"openai messages: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"original_model\":\"claude-sonnet-4-5\",\"normalized_model\":\"claude-sonnet-4-5\",\"billing_model\":\"gpt-4o\",\"upstream_model\":\"gpt-4o\",\"stream\":true}\n"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/expired_5h_window_zeroes_utilization","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:33.098Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-4o\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/missing_priority_prices_are_backfilled_from_standard","Output":"--- PASS: TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/missing_priority_prices_are_backfilled_from_standard (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/missing_priority_prices_are_backfilled_from_standard","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAICodexProbeUpdatesAccepts429WithCodexHeaders"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAICodexProbeUpdatesAccepts429WithCodexHeaders","Output":"=== CONT TestExtractOpenAICodexProbeUpdatesAccepts429WithCodexHeaders\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPreservesCompatibleAstraTextOnlyMetadata","Output":"--- PASS: TestBuildCodexModelsManifestForGroupPreservesCompatibleAstraTextOnlyMetadata (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPreservesCompatibleAstraTextOnlyMetadata","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAICodexProbeUpdatesAccepts429WithCodexHeaders","Output":"--- PASS: TestExtractOpenAICodexProbeUpdatesAccepts429WithCodexHeaders (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAICodexProbeUpdatesAccepts429WithCodexHeaders","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot","Output":"=== CONT TestShouldRefreshOpenAICodexSnapshot\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot","Output":"--- PASS: TestShouldRefreshOpenAICodexSnapshot (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesCurrentSnapshotForCachedNativeManifest"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesCurrentSnapshotForCachedNativeManifest","Output":"=== CONT TestCompleteAPIKeyCodexModelsManifestForClientUsesCurrentSnapshotForCachedNativeManifest\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSJSONForCompareOrRaw","Output":"--- PASS: TestNormalizeOpenAIWSJSONForCompareOrRaw (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSJSONForCompareOrRaw","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_delta_append"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_delta_append","Output":"=== RUN TestBuildOpenAIWSReplayInputSequence/previous_response_id_delta_append\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_delta_append","Output":"--- PASS: TestBuildOpenAIWSReplayInputSequence/previous_response_id_delta_append (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_delta_append","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_filters_orphan_historical_custom_tool_call"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_filters_orphan_historical_custom_tool_call","Output":"=== RUN TestBuildOpenAIWSReplayInputSequence/previous_response_id_filters_orphan_historical_custom_tool_call\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/priority_passes_through"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/priority_passes_through","Output":"=== RUN TestValidateOpenAIServiceTierField/priority_passes_through\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSEventShouldParseUsageTerminalEvents","Output":"--- PASS: TestOpenAIWSEventShouldParseUsageTerminalEvents (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSEventShouldParseUsageTerminalEvents","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeGroupMessagesDispatchFields_ClearsNonOpenAIPlatform","Output":"--- PASS: TestSanitizeGroupMessagesDispatchFields_ClearsNonOpenAIPlatform (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeGroupMessagesDispatchFields_ClearsNonOpenAIPlatform","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIgnoresPersistentlyDisabledMappedAccounts","Output":"--- PASS: TestBuildCodexModelsManifestForGroupIgnoresPersistentlyDisabledMappedAccounts (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIgnoresPersistentlyDisabledMappedAccounts","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatPreviousResponseUnavailableRecognitionIsStrict","Output":"--- PASS: TestOpenAICompatPreviousResponseUnavailableRecognitionIsStrict (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatPreviousResponseUnavailableRecognitionIsStrict","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIMessagesDispatchModelConfig","Output":"--- PASS: TestNormalizeOpenAIMessagesDispatchModelConfig (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIMessagesDispatchModelConfig","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/priority_passes_through","Output":"--- PASS: TestValidateOpenAIServiceTierField/priority_passes_through (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/priority_passes_through","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplatePrependsRenderedInstructions","Output":"--- PASS: TestForwardAsAnthropic_ForcedCodexInstructionsTemplatePrependsRenderedInstructions (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplatePrependsRenderedInstructions","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/no_observer_keeps_outbound_tier","Output":"--- PASS: TestResolvedOpenAIUpstreamServiceTier/no_observer_keeps_outbound_tier (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/no_observer_keeps_outbound_tier","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesSyncedMetadataForConvertedModelList","Output":"--- PASS: TestCompleteAPIKeyCodexModelsManifestForClientUsesSyncedMetadataForConvertedModelList (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesSyncedMetadataForConvertedModelList","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed","Output":"--- PASS: TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/no_observer_and_no_outbound_tier_stays_nil"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/no_observer_and_no_outbound_tier_stays_nil","Output":"=== RUN TestResolvedOpenAIUpstreamServiceTier/no_observer_and_no_outbound_tier_stays_nil\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestLeavesServiceTiersEmptyForOtherModels","Output":"--- PASS: TestBuildCodexModelsManifestLeavesServiceTiersEmptyForOtherModels (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestLeavesServiceTiersEmptyForOtherModels","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSPayloadWithoutInputAndPreviousResponseID","Output":"--- PASS: TestNormalizeOpenAIWSPayloadWithoutInputAndPreviousResponseID (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSPayloadWithoutInputAndPreviousResponseID","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/no_observer_and_no_outbound_tier_stays_nil","Output":"--- PASS: TestResolvedOpenAIUpstreamServiceTier/no_observer_and_no_outbound_tier_stays_nil (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/no_observer_and_no_outbound_tier_stays_nil","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackWhenCapabilityLookupFails"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackWhenCapabilityLookupFails","Output":"=== CONT TestBuildCodexModelsManifestForGroupFallsBackWhenCapabilityLookupFails\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/compaction_removed_entirely","Output":"=== PAUSE TestStripOpenAIInvalidEncryptedContentItems/compaction_removed_entirely\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/compaction_removed_entirely"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/no_hit_no_change"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/no_hit_no_change","Output":"=== RUN TestStripOpenAIInvalidEncryptedContentItems/no_hit_no_change\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/no_hit_no_change","Output":"=== PAUSE TestStripOpenAIInvalidEncryptedContentItems/no_hit_no_change\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/no_hit_no_change"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/fast"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/fast","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/fast\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_text-only_snapshot_narrows_local_fallback"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_text-only_snapshot_narrows_local_fallback","Output":"=== CONT TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_text-only_snapshot_narrows_local_fallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCombineOpenAIWSReplayItems","Output":"--- PASS: TestCombineOpenAIWSReplayItems (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCombineOpenAIWSReplayItems","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/local_observer_stays_separate_from_outbound_tier"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/local_observer_stays_separate_from_outbound_tier","Output":"=== RUN TestResolvedOpenAIUpstreamServiceTier/local_observer_stays_separate_from_outbound_tier\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/local_observer_stays_separate_from_outbound_tier","Output":"--- PASS: TestResolvedOpenAIUpstreamServiceTier/local_observer_stays_separate_from_outbound_tier (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/local_observer_stays_separate_from_outbound_tier","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/nil_local_observer_falls_back_to_outbound_tier"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/nil_local_observer_falls_back_to_outbound_tier","Output":"=== RUN TestResolvedOpenAIUpstreamServiceTier/nil_local_observer_falls_back_to_outbound_tier\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/nil_local_observer_falls_back_to_outbound_tier","Output":"--- PASS: TestResolvedOpenAIUpstreamServiceTier/nil_local_observer_falls_back_to_outbound_tier (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/nil_local_observer_falls_back_to_outbound_tier","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier","Output":"--- PASS: TestResolvedOpenAIUpstreamServiceTier (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_multimodal_snapshot_preserves_local_fallback"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_multimodal_snapshot_preserves_local_fallback","Output":"=== CONT TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_multimodal_snapshot_preserves_local_fallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/mark_get_roundtrip_with_merge"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/mark_get_roundtrip_with_merge","Output":"=== CONT TestOpenAIWSStateStoreInvalidEncryptedContentLineage/mark_get_roundtrip_with_merge\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestExpandsSelectedModelCoveredByWildcardMapping","Output":"--- PASS: TestBuildGroupConfiguredCodexModelsManifestExpandsSelectedModelCoveredByWildcardMapping (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestExpandsSelectedModelCoveredByWildcardMapping","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/per_session_capacity_degrades_gracefully"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/per_session_capacity_degrades_gracefully","Output":"=== CONT TestOpenAIWSStateStoreInvalidEncryptedContentLineage/per_session_capacity_degrades_gracefully\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/mark_get_roundtrip_with_merge","Output":"--- PASS: TestOpenAIWSStateStoreInvalidEncryptedContentLineage/mark_get_roundtrip_with_merge (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/mark_get_roundtrip_with_merge","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/expired_binding_not_returned"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/expired_binding_not_returned","Output":"=== CONT TestOpenAIWSStateStoreInvalidEncryptedContentLineage/expired_binding_not_returned\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts","Output":"--- PASS: TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/already_embeddings"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/already_embeddings","Output":"=== RUN TestBuildOpenAIEmbeddingsURL/already_embeddings\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/zhipu_v4_coding_base_url"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/zhipu_v4_coding_base_url","Output":"=== CONT TestBuildOpenAIModelsURL/zhipu_v4_coding_base_url\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/already_embeddings","Output":"=== PAUSE TestBuildOpenAIEmbeddingsURL/already_embeddings\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/already_embeddings"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/zhipu_v4_coding_base_url","Output":"--- PASS: TestBuildOpenAIModelsURL/zhipu_v4_coding_base_url (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/zhipu_v4_coding_base_url","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_multimodal_snapshot_preserves_local_fallback","Output":"--- PASS: TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_multimodal_snapshot_preserves_local_fallback (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_multimodal_snapshot_preserves_local_fallback","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/trailing_slash_on_v4"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/trailing_slash_on_v4","Output":"=== CONT TestBuildOpenAIModelsURL/trailing_slash_on_v4\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ReusesOAuthCodexTurnState","Output":"--- PASS: TestForwardAsAnthropic_ReusesOAuthCodexTurnState (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ReusesOAuthCodexTurnState","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/third-party_versioned_path"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/third-party_versioned_path","Output":"=== RUN TestBuildOpenAIEmbeddingsURL/third-party_versioned_path\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/trailing_slash_on_v4","Output":"--- PASS: TestBuildOpenAIModelsURL/trailing_slash_on_v4 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/trailing_slash_on_v4","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/v2_base_url"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/v2_base_url","Output":"=== CONT TestBuildOpenAIModelsURL/v2_base_url\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/third-party_versioned_path","Output":"=== PAUSE TestBuildOpenAIEmbeddingsURL/third-party_versioned_path\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/third-party_versioned_path"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/chat_bridge","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/chat_bridge\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/chat_bridge"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/host_fallback_uses_v1"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/host_fallback_uses_v1","Output":"=== CONT TestBuildOpenAIModelsURL/host_fallback_uses_v1\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/openai_v1_base_url"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/openai_v1_base_url","Output":"=== CONT TestBuildOpenAIModelsURL/openai_v1_base_url\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/function_call_output"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/function_call_output","Output":"=== CONT TestOpenAIWSRawPayloadHasToolCallOutput/function_call_output\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/function_call_output","Output":"--- PASS: TestOpenAIWSRawPayloadHasToolCallOutput/function_call_output (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/function_call_output","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/fast","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/fast (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/fast","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/custom_tool_call_output"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/custom_tool_call_output","Output":"=== CONT TestOpenAIWSRawPayloadHasToolCallOutput/custom_tool_call_output\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel/gpt_reasoning_alias_strips_xhigh"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel/gpt_reasoning_alias_strips_xhigh","Output":"=== RUN TestNormalizeOpenAICompatRequestedModel/gpt_reasoning_alias_strips_xhigh\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/custom_tool_call_output","Output":"--- PASS: TestOpenAIWSRawPayloadHasToolCallOutput/custom_tool_call_output (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/custom_tool_call_output","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/mcp_tool_call_output"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/mcp_tool_call_output","Output":"=== CONT TestOpenAIWSRawPayloadHasToolCallOutput/mcp_tool_call_output\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesNoneForExplicitNonReasoningMetadata"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesNoneForExplicitNonReasoningMetadata","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesNoneForExplicitNonReasoningMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/tool_search_output"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/tool_search_output","Output":"=== CONT TestOpenAIWSRawPayloadHasToolCallOutput/tool_search_output\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/non_tool_output"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/non_tool_output","Output":"=== CONT TestOpenAIWSRawPayloadHasToolCallOutput/non_tool_output\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems/rewrites_hit_items_and_shares_the_rest"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems/rewrites_hit_items_and_shares_the_rest","Output":"=== CONT TestStripOpenAIInvalidEncryptedContentFromReplayItems/rewrites_hit_items_and_shares_the_rest\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel/gpt_reasoning_alias_strips_xhigh","Output":"--- PASS: TestNormalizeOpenAICompatRequestedModel/gpt_reasoning_alias_strips_xhigh (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel/gpt_reasoning_alias_strips_xhigh","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/current_invalid_input_json"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/current_invalid_input_json","Output":"=== RUN TestOpenAIWSInputIsPrefixExtended/current_invalid_input_json\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems/miss_returns_original_header"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems/miss_returns_original_header","Output":"=== CONT TestStripOpenAIInvalidEncryptedContentFromReplayItems/miss_returns_original_header\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/current_invalid_input_json","Output":"=== PAUSE TestOpenAIWSInputIsPrefixExtended/current_invalid_input_json\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/current_invalid_input_json"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems/miss_returns_original_header","Output":"--- PASS: TestStripOpenAIInvalidEncryptedContentFromReplayItems/miss_returns_original_header (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems/miss_returns_original_header","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/no_hit_no_change"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/no_hit_no_change","Output":"=== CONT TestStripOpenAIInvalidEncryptedContentItems/no_hit_no_change\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/invalid_input_json"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/invalid_input_json","Output":"=== RUN TestOpenAIWSInputIsPrefixExtended/invalid_input_json\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/only_strips_matching_items"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/only_strips_matching_items","Output":"=== CONT TestStripOpenAIInvalidEncryptedContentItems/only_strips_matching_items\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/invalid_input_json","Output":"=== PAUSE TestOpenAIWSInputIsPrefixExtended/invalid_input_json\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/invalid_input_json"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/input_string_treated_as_single_item"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/input_string_treated_as_single_item","Output":"=== CONT TestOpenAIWSInputIsPrefixExtended/input_string_treated_as_single_item\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems/rewrites_hit_items_and_shares_the_rest","Output":"--- PASS: TestStripOpenAIInvalidEncryptedContentFromReplayItems/rewrites_hit_items_and_shares_the_rest (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems/rewrites_hit_items_and_shares_the_rest","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/both_missing_input"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/both_missing_input","Output":"=== CONT TestOpenAIWSInputIsPrefixExtended/both_missing_input\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/both_missing_input","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.098Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] invalid_encrypted_lineage_capacity_overflow dropped_digests=10 capacity=512\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsInjectsCurrentGroupAliases"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsInjectsCurrentGroupAliases","Output":"=== CONT TestMergeGroupConfiguredCodexModelsInjectsCurrentGroupAliases\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/current_shorter_than_previous"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/current_shorter_than_previous","Output":"=== CONT TestOpenAIWSInputIsPrefixExtended/current_shorter_than_previous\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_mismatch"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_mismatch","Output":"=== CONT TestOpenAIWSInputIsPrefixExtended/array_prefix_mismatch\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_401"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_401","Output":"=== RUN TestIsRetryableCodexModelsManifestStatus/api_key_401\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_401","Output":"=== PAUSE TestIsRetryableCodexModelsManifestStatus/api_key_401\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_401"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_match"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_match","Output":"=== CONT TestOpenAIWSInputIsPrefixExtended/array_prefix_match\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_missing_current_non_empty_array"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_missing_current_non_empty_array","Output":"=== CONT TestOpenAIWSInputIsPrefixExtended/previous_missing_current_non_empty_array\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_401"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_401","Output":"=== RUN TestIsRetryableCodexModelsManifestStatus/oauth_401\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/invalid_input_json"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/invalid_input_json","Output":"=== CONT TestOpenAIWSInputIsPrefixExtended/invalid_input_json\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_401","Output":"=== PAUSE TestIsRetryableCodexModelsManifestStatus/oauth_401\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_401"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_array"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_array","Output":"=== RUN TestOpenAIWSExtractNormalizedInputSequence/input_array\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/current_invalid_input_json"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/current_invalid_input_json","Output":"=== CONT TestOpenAIWSInputIsPrefixExtended/current_invalid_input_json\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_400"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_400","Output":"=== RUN TestIsRetryableCodexModelsManifestStatus/api_key_400\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_array","Output":"--- PASS: TestOpenAIWSExtractNormalizedInputSequence/input_array (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_array","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_400","Output":"=== PAUSE TestIsRetryableCodexModelsManifestStatus/api_key_400\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_400"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupCorrectsOfficialAstraStaleModalities"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupCorrectsOfficialAstraStaleModalities","Output":"=== CONT TestBuildCodexModelsManifestForGroupCorrectsOfficialAstraStaleModalities\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_403"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_403","Output":"=== RUN TestIsRetryableCodexModelsManifestStatus/api_key_403\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies/build_transfers_current_items_ownership"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies/build_transfers_current_items_ownership","Output":"=== RUN TestOpenAIWSReplaySequenceSharesBodies/build_transfers_current_items_ownership\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_403","Output":"=== PAUSE TestIsRetryableCodexModelsManifestStatus/api_key_403\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_403"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/rate_limited"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/rate_limited","Output":"=== RUN TestIsRetryableCodexModelsManifestStatus/rate_limited\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/rate_limited","Output":"=== PAUSE TestIsRetryableCodexModelsManifestStatus/rate_limited\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/rate_limited"}
- {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization","Output":"=== CONT TestApplyOpenAICompatModelNormalization\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentRaw/miss_fast_path_returns_original"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentRaw/miss_fast_path_returns_original","Output":"=== CONT TestStripOpenAIInvalidEncryptedContentRaw/miss_fast_path_returns_original\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentRaw/miss_fast_path_returns_original","Output":"--- PASS: TestStripOpenAIInvalidEncryptedContentRaw/miss_fast_path_returns_original (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentRaw/miss_fast_path_returns_original","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_3_Mini_is_text_only"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_3_Mini_is_text_only","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_3_Mini_is_text_only\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_3_Mini_is_text_only","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_3_Mini_is_text_only\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_3_Mini_is_text_only"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_Composer_has_only_Chat_image_bridge"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_Composer_has_only_Chat_image_bridge","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_Composer_has_only_Chat_image_bridge\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_Composer_has_only_Chat_image_bridge","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_Composer_has_only_Chat_image_bridge\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_Composer_has_only_Chat_image_bridge"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization/derives_xhigh_from_model_suffix_when_output_config_missing"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization/derives_xhigh_from_model_suffix_when_output_config_missing","Output":"=== RUN TestApplyOpenAICompatModelNormalization/derives_xhigh_from_model_suffix_when_output_config_missing\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization/derives_xhigh_from_model_suffix_when_output_config_missing","Output":"--- PASS: TestApplyOpenAICompatModelNormalization/derives_xhigh_from_model_suffix_when_output_config_missing (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization/derives_xhigh_from_model_suffix_when_output_config_missing","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/server_error"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/server_error","Output":"=== RUN TestIsRetryableCodexModelsManifestStatus/server_error\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/server_error","Output":"=== PAUSE TestIsRetryableCodexModelsManifestStatus/server_error\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/server_error"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_404"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_404","Output":"=== CONT TestIsRetryableCodexModelsManifestStatus/api_key_404\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/malformed_Grok_host"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/malformed_Grok_host","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/malformed_Grok_host\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot_SparkShadowIgnoresWSv2","Output":"--- PASS: TestShouldRefreshOpenAICodexSnapshot_SparkShadowIgnoresWSv2 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot_SparkShadowIgnoresWSv2","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/malformed_Grok_host","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/malformed_Grok_host\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/malformed_Grok_host"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsInjectsCurrentGroupAliases","Output":"--- PASS: TestMergeGroupConfiguredCodexModelsInjectsCurrentGroupAliases (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsInjectsCurrentGroupAliases","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_TrimsFullReplayOnlyForCodexCompatModels","Output":"--- PASS: TestForwardAsAnthropic_TrimsFullReplayOnlyForCodexCompatModels (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_TrimsFullReplayOnlyForCodexCompatModels","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_401"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_401","Output":"=== CONT TestIsRetryableCodexModelsManifestStatus/api_key_401\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_404","Output":"--- PASS: TestIsRetryableCodexModelsManifestStatus/api_key_404 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_404","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_405"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_405","Output":"=== CONT TestIsRetryableCodexModelsManifestStatus/oauth_405\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_404"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_404","Output":"=== CONT TestIsRetryableCodexModelsManifestStatus/oauth_404\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/bare_domain"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/bare_domain","Output":"=== CONT TestBuildOpenAIEmbeddingsURL/bare_domain\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCompleteCodexManifest","Output":"--- PASS: TestConvertOpenAIModelListToCompleteCodexManifest (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCompleteCodexManifest","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_405"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_405","Output":"=== CONT TestIsRetryableCodexModelsManifestStatus/api_key_405\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientPreservesProviderMetadata","Output":"--- PASS: TestCompleteAPIKeyCodexModelsManifestForClientPreservesProviderMetadata (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientPreservesProviderMetadata","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/third-party_versioned_path"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/third-party_versioned_path","Output":"=== CONT TestBuildOpenAIEmbeddingsURL/third-party_versioned_path\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.5-pro_has_no_mandated_fast_tier"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.5-pro_has_no_mandated_fast_tier","Output":"=== RUN TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.5-pro_has_no_mandated_fast_tier\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/already_embeddings"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/already_embeddings","Output":"=== CONT TestBuildOpenAIEmbeddingsURL/already_embeddings\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/io_eof"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/io_eof","Output":"=== RUN TestIsOpenAIWSClientDisconnectError/io_eof\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackWhenCapabilityLookupFails","Output":"--- PASS: TestBuildCodexModelsManifestForGroupFallsBackWhenCapabilityLookupFails (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackWhenCapabilityLookupFails","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/io_eof","Output":"=== PAUSE TestIsOpenAIWSClientDisconnectError/io_eof\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/io_eof"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.5-pro_has_no_mandated_fast_tier","Output":"--- PASS: TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.5-pro_has_no_mandated_fast_tier (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.5-pro_has_no_mandated_fast_tier","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/priority_alias"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/priority_alias","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/priority_alias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems","Output":"--- PASS: TestStripOpenAIInvalidEncryptedContentFromReplayItems (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/net_closed"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/net_closed","Output":"=== RUN TestIsOpenAIWSClientDisconnectError/net_closed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFiltersOfficialNonAgentModels","Output":"--- PASS: TestCompleteAPIKeyCodexModelsManifestForClientFiltersOfficialNonAgentModels (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFiltersOfficialNonAgentModels","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel/gpt_reasoning_alias_strips_none"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel/gpt_reasoning_alias_strips_none","Output":"=== RUN TestNormalizeOpenAICompatRequestedModel/gpt_reasoning_alias_strips_none\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/net_closed","Output":"=== PAUSE TestIsOpenAIWSClientDisconnectError/net_closed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/net_closed"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesNoneForExplicitNonReasoningMetadata","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesNoneForExplicitNonReasoningMetadata (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesNoneForExplicitNonReasoningMetadata","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/context_canceled"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/context_canceled","Output":"=== RUN TestIsOpenAIWSClientDisconnectError/context_canceled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/context_canceled","Output":"=== PAUSE TestIsOpenAIWSClientDisconnectError/context_canceled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/context_canceled"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/bare_/v1"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/bare_/v1","Output":"=== CONT TestBuildOpenAIEmbeddingsURL/bare_/v1\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_normal_closure"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_normal_closure","Output":"=== RUN TestIsOpenAIWSClientDisconnectError/ws_normal_closure\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_normal_closure","Output":"=== PAUSE TestIsOpenAIWSClientDisconnectError/ws_normal_closure\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_normal_closure"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentRaw","Output":"--- PASS: TestStripOpenAIInvalidEncryptedContentRaw (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentRaw","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_going_away"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_going_away","Output":"=== RUN TestIsOpenAIWSClientDisconnectError/ws_going_away\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupCorrectsOfficialAstraStaleModalities","Output":"--- PASS: TestBuildCodexModelsManifestForGroupCorrectsOfficialAstraStaleModalities (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupCorrectsOfficialAstraStaleModalities","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization/explicit_output_config_wins_over_model_suffix"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization/explicit_output_config_wins_over_model_suffix","Output":"=== RUN TestApplyOpenAICompatModelNormalization/explicit_output_config_wins_over_model_suffix\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_object"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_object","Output":"=== RUN TestOpenAIWSExtractNormalizedInputSequence/input_object\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization/explicit_output_config_wins_over_model_suffix","Output":"--- PASS: TestApplyOpenAICompatModelNormalization/explicit_output_config_wins_over_model_suffix (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization/explicit_output_config_wins_over_model_suffix","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_object","Output":"--- PASS: TestOpenAIWSExtractNormalizedInputSequence/input_object (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_object","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_going_away","Output":"=== PAUSE TestIsOpenAIWSClientDisconnectError/ws_going_away\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_going_away"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/expired_binding_not_returned","Output":"--- PASS: TestOpenAIWSStateStoreInvalidEncryptedContentLineage/expired_binding_not_returned (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/expired_binding_not_returned","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/unrelated_models_untouched"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/unrelated_models_untouched","Output":"=== RUN TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/unrelated_models_untouched\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/v2_base_url","Output":"--- PASS: TestBuildOpenAIModelsURL/v2_base_url (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/v2_base_url","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/models_url_unchanged"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/models_url_unchanged","Output":"=== CONT TestBuildOpenAIModelsURL/models_url_unchanged\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/object_input"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/object_input","Output":"=== CONT TestOpenAIWSRawPayloadHasToolCallOutput/object_input\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/mcp_tool_call_output","Output":"--- PASS: TestOpenAIWSRawPayloadHasToolCallOutput/mcp_tool_call_output (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/mcp_tool_call_output","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_no_status"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_no_status","Output":"=== RUN TestIsOpenAIWSClientDisconnectError/ws_no_status\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/tool_search_output","Output":"--- PASS: TestOpenAIWSRawPayloadHasToolCallOutput/tool_search_output (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/tool_search_output","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_no_status","Output":"=== PAUSE TestIsOpenAIWSClientDisconnectError/ws_no_status\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_no_status"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/case_and_whitespace_insensitive"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/case_and_whitespace_insensitive","Output":"=== RUN TestValidateOpenAIServiceTierField/case_and_whitespace_insensitive\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/case_and_whitespace_insensitive","Output":"--- PASS: TestValidateOpenAIServiceTierField/case_and_whitespace_insensitive (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/case_and_whitespace_insensitive","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_text-only_snapshot_narrows_local_fallback","Output":"--- PASS: TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_text-only_snapshot_narrows_local_fallback (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_text-only_snapshot_narrows_local_fallback","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/non_tool_output","Output":"--- PASS: TestOpenAIWSRawPayloadHasToolCallOutput/non_tool_output (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/non_tool_output","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities","Output":"--- PASS: TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/no_hit_no_change","Output":"--- PASS: TestStripOpenAIInvalidEncryptedContentItems/no_hit_no_change (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/no_hit_no_change","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/only_strips_matching_items","Output":"--- PASS: TestStripOpenAIInvalidEncryptedContentItems/only_strips_matching_items (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/only_strips_matching_items","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/unrelated_models_untouched","Output":"--- PASS: TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/unrelated_models_untouched (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/unrelated_models_untouched","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios","Output":"--- PASS: TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/native_responses"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/native_responses","Output":"=== RUN TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/native_responses\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/host_fallback_uses_v1","Output":"--- PASS: TestBuildOpenAIModelsURL/host_fallback_uses_v1 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/host_fallback_uses_v1","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/openai_v1_base_url","Output":"--- PASS: TestBuildOpenAIModelsURL/openai_v1_base_url (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/openai_v1_base_url","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_abnormal_1006"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_abnormal_1006","Output":"=== RUN TestIsOpenAIWSClientDisconnectError/ws_abnormal_1006\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_abnormal_1006","Output":"=== PAUSE TestIsOpenAIWSClientDisconnectError/ws_abnormal_1006\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_abnormal_1006"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/models_url_unchanged","Output":"--- PASS: TestBuildOpenAIModelsURL/models_url_unchanged (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/models_url_unchanged","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_policy_violation"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_policy_violation","Output":"=== RUN TestIsOpenAIWSClientDisconnectError/ws_policy_violation\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/compaction_removed_entirely"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/compaction_removed_entirely","Output":"=== CONT TestStripOpenAIInvalidEncryptedContentItems/compaction_removed_entirely\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesCurrentSnapshotForCachedNativeManifest","Output":"--- PASS: TestCompleteAPIKeyCodexModelsManifestForClientUsesCurrentSnapshotForCachedNativeManifest (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesCurrentSnapshotForCachedNativeManifest","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/input_string_treated_as_single_item","Output":"--- PASS: TestOpenAIWSInputIsPrefixExtended/input_string_treated_as_single_item (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/input_string_treated_as_single_item","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/compaction_removed_entirely","Output":"--- PASS: TestStripOpenAIInvalidEncryptedContentItems/compaction_removed_entirely (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/compaction_removed_entirely","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/both_missing_input","Output":"--- PASS: TestOpenAIWSInputIsPrefixExtended/both_missing_input (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/both_missing_input","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems","Output":"--- PASS: TestStripOpenAIInvalidEncryptedContentItems (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/current_shorter_than_previous","Output":"--- PASS: TestOpenAIWSInputIsPrefixExtended/current_shorter_than_previous (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/current_shorter_than_previous","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_mismatch","Output":"--- PASS: TestOpenAIWSInputIsPrefixExtended/array_prefix_mismatch (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_mismatch","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_has_input_current_missing"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_has_input_current_missing","Output":"=== CONT TestOpenAIWSInputIsPrefixExtended/previous_has_input_current_missing\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_missing_current_non_empty_array","Output":"--- PASS: TestOpenAIWSInputIsPrefixExtended/previous_missing_current_non_empty_array (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_missing_current_non_empty_array","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_has_input_current_missing","Output":"--- PASS: TestOpenAIWSInputIsPrefixExtended/previous_has_input_current_missing (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_has_input_current_missing","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_filters_orphan_historical_custom_tool_call","Output":"--- PASS: TestBuildOpenAIWSReplayInputSequence/previous_response_id_filters_orphan_historical_custom_tool_call (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_filters_orphan_historical_custom_tool_call","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_match","Output":"--- PASS: TestOpenAIWSInputIsPrefixExtended/array_prefix_match (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_match","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/current_invalid_input_json","Output":"--- PASS: TestOpenAIWSInputIsPrefixExtended/current_invalid_input_json (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/current_invalid_input_json","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/v3_base_url"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/v3_base_url","Output":"=== CONT TestBuildOpenAIModelsURL/v3_base_url\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_preserves_paired_historical_function_call"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_preserves_paired_historical_function_call","Output":"=== RUN TestBuildOpenAIWSReplayInputSequence/previous_response_id_preserves_paired_historical_function_call\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/server_error"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/server_error","Output":"=== CONT TestIsRetryableCodexModelsManifestStatus/server_error\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/rate_limited"}
- {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/rate_limited","Output":"=== CONT TestIsRetryableCodexModelsManifestStatus/rate_limited\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_403"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_403","Output":"=== CONT TestIsRetryableCodexModelsManifestStatus/api_key_403\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_400"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_400","Output":"=== CONT TestIsRetryableCodexModelsManifestStatus/api_key_400\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_401"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_401","Output":"=== CONT TestIsRetryableCodexModelsManifestStatus/oauth_401\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/mixed_official_and_custom_Grok_candidates"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/mixed_official_and_custom_Grok_candidates","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/mixed_official_and_custom_Grok_candidates\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/mixed_official_and_custom_Grok_candidates","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/mixed_official_and_custom_Grok_candidates\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/mixed_official_and_custom_Grok_candidates"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_API_key"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_API_key","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_API_key\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_API_key","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_API_key\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_API_key"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_missing_current_empty_array"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_missing_current_empty_array","Output":"=== CONT TestOpenAIWSInputIsPrefixExtended/previous_missing_current_empty_array\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/invalid_input_json","Output":"--- PASS: TestOpenAIWSInputIsPrefixExtended/invalid_input_json (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/invalid_input_json","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/active_5h_window_keeps_utilization"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/active_5h_window_keeps_utilization","Output":"=== RUN TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/active_5h_window_keeps_utilization\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/active_5h_window_keeps_utilization","Output":"--- PASS: TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/active_5h_window_keeps_utilization (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/active_5h_window_keeps_utilization","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_missing_current_empty_array","Output":"--- PASS: TestOpenAIWSInputIsPrefixExtended/previous_missing_current_empty_array (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_missing_current_empty_array","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended","Output":"--- PASS: TestOpenAIWSInputIsPrefixExtended (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/expired_7d_window_zeroes_utilization"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/expired_7d_window_zeroes_utilization","Output":"=== RUN TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/expired_7d_window_zeroes_utilization\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/v3_base_url","Output":"--- PASS: TestBuildOpenAIModelsURL/v3_base_url (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/v3_base_url","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/expired_7d_window_zeroes_utilization","Output":"--- PASS: TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/expired_7d_window_zeroes_utilization (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/expired_7d_window_zeroes_utilization","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/bare_domain","Output":"--- PASS: TestBuildOpenAIEmbeddingsURL/bare_domain (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/bare_domain","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL","Output":"--- PASS: TestBuildOpenAIModelsURL (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/third-party_versioned_path","Output":"--- PASS: TestBuildOpenAIEmbeddingsURL/third-party_versioned_path (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/third-party_versioned_path","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization/non_openai_model_is_untouched"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization/non_openai_model_is_untouched","Output":"=== RUN TestApplyOpenAICompatModelNormalization/non_openai_model_is_untouched\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/already_embeddings","Output":"--- PASS: TestBuildOpenAIEmbeddingsURL/already_embeddings (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/already_embeddings","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/bare_/v1","Output":"--- PASS: TestBuildOpenAIEmbeddingsURL/bare_/v1 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/bare_/v1","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization/non_openai_model_is_untouched","Output":"--- PASS: TestApplyOpenAICompatModelNormalization/non_openai_model_is_untouched (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization/non_openai_model_is_untouched","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow","Output":"--- PASS: TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_string"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_string","Output":"=== RUN TestOpenAIWSExtractNormalizedInputSequence/input_string\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/per_session_capacity_degrades_gracefully","Output":"--- PASS: TestOpenAIWSStateStoreInvalidEncryptedContentLineage/per_session_capacity_degrades_gracefully (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/per_session_capacity_degrades_gracefully","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_preserves_paired_historical_function_call","Output":"--- PASS: TestBuildOpenAIWSReplayInputSequence/previous_response_id_preserves_paired_historical_function_call (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_preserves_paired_historical_function_call","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL","Output":"--- PASS: TestBuildOpenAIEmbeddingsURL (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization","Output":"--- PASS: TestApplyOpenAICompatModelNormalization (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/official_tiers_pass_through"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/official_tiers_pass_through","Output":"=== RUN TestValidateOpenAIServiceTierField/official_tiers_pass_through\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_DoesNotAutoDerivePromptCacheKeyForNonCodexModel"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_DoesNotAutoDerivePromptCacheKeyForNonCodexModel","Output":"=== CONT TestForwardAsAnthropic_DoesNotAutoDerivePromptCacheKeyForNonCodexModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/official_tiers_pass_through","Output":"--- PASS: TestValidateOpenAIServiceTierField/official_tiers_pass_through (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/official_tiers_pass_through","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage","Output":"--- PASS: TestOpenAIWSStateStoreInvalidEncryptedContentLineage (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_preserves_paired_historical_custom_tool_call"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_preserves_paired_historical_custom_tool_call","Output":"=== RUN TestBuildOpenAIWSReplayInputSequence/previous_response_id_preserves_paired_historical_custom_tool_call\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:33.100Z\",\"msg\":\"openai messages: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"original_model\":\"claude-sonnet-4-5\",\"normalized_model\":\"claude-sonnet-4-5\",\"billing_model\":\"gpt-4o\",\"upstream_model\":\"gpt-4o\",\"stream\":true}\n"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/invalid_tier_rejected"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/invalid_tier_rejected","Output":"=== RUN TestValidateOpenAIServiceTierField/invalid_tier_rejected\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/invalid_tier_rejected","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:33.100Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-4o\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/native_responses","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/native_responses\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/native_responses"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/mixed_routes"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/mixed_routes","Output":"=== RUN TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/mixed_routes\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_preserves_paired_historical_custom_tool_call","Output":"--- PASS: TestBuildOpenAIWSReplayInputSequence/previous_response_id_preserves_paired_historical_custom_tool_call (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_preserves_paired_historical_custom_tool_call","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/mixed_routes","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/mixed_routes\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/mixed_routes"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/invalid_tier_rejected","Output":"--- PASS: TestValidateOpenAIServiceTierField/invalid_tier_rejected (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/invalid_tier_rejected","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/chat_bridge"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/chat_bridge","Output":"=== CONT TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/chat_bridge\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_policy_violation","Output":"=== PAUSE TestIsOpenAIWSClientDisconnectError/ws_policy_violation\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_policy_violation"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/native_responses"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/native_responses","Output":"=== CONT TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/native_responses\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/omitted_field_stays_valid"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/omitted_field_stays_valid","Output":"=== RUN TestValidateOpenAIServiceTierField/omitted_field_stays_valid\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_DoesNotAutoDerivePromptCacheKeyForNonCodexModel","Output":"--- PASS: TestForwardAsAnthropic_DoesNotAutoDerivePromptCacheKeyForNonCodexModel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_DoesNotAutoDerivePromptCacheKeyForNonCodexModel","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/wrapped_eof_message"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/wrapped_eof_message","Output":"=== RUN TestIsOpenAIWSClientDisconnectError/wrapped_eof_message\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/object_input","Output":"--- PASS: TestOpenAIWSRawPayloadHasToolCallOutput/object_input (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/object_input","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/wrapped_eof_message","Output":"=== PAUSE TestIsOpenAIWSClientDisconnectError/wrapped_eof_message\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/wrapped_eof_message"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput","Output":"--- PASS: TestOpenAIWSRawPayloadHasToolCallOutput (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/connection_reset_by_peer"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/connection_reset_by_peer","Output":"=== RUN TestIsOpenAIWSClientDisconnectError/connection_reset_by_peer\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/connection_reset_by_peer","Output":"=== PAUSE TestIsOpenAIWSClientDisconnectError/connection_reset_by_peer\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/connection_reset_by_peer"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/mixed_routes"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/mixed_routes","Output":"=== CONT TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/mixed_routes\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/windows_connection_reset"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/windows_connection_reset","Output":"=== RUN TestIsOpenAIWSClientDisconnectError/windows_connection_reset\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies/build_transfers_current_items_ownership","Output":"--- PASS: TestOpenAIWSReplaySequenceSharesBodies/build_transfers_current_items_ownership (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies/build_transfers_current_items_ownership","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/windows_connection_reset","Output":"=== PAUSE TestIsOpenAIWSClientDisconnectError/windows_connection_reset\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/windows_connection_reset"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/priority_alias","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/priority_alias (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/priority_alias","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies/build_merge_shares_history_bodies"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies/build_merge_shares_history_bodies","Output":"=== RUN TestOpenAIWSReplaySequenceSharesBodies/build_merge_shares_history_bodies\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/no_tier_unchanged"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/no_tier_unchanged","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/no_tier_unchanged\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientMarksOnlyOfficialVisionGPTImageInput","Output":"--- PASS: TestCompleteAPIKeyCodexModelsManifestForClientMarksOnlyOfficialVisionGPTImageInput (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientMarksOnlyOfficialVisionGPTImageInput","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/no_tier_unchanged","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/no_tier_unchanged (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/no_tier_unchanged","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies/build_merge_shares_history_bodies","Output":"--- PASS: TestOpenAIWSReplaySequenceSharesBodies/build_merge_shares_history_bodies (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies/build_merge_shares_history_bodies","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/broken_pipe"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/broken_pipe","Output":"=== RUN TestIsOpenAIWSClientDisconnectError/broken_pipe\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/broken_pipe","Output":"=== PAUSE TestIsOpenAIWSClientDisconnectError/broken_pipe\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/broken_pipe"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies/build_prefix_hit_transfers_current_items"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies/build_prefix_hit_transfers_current_items","Output":"=== RUN TestOpenAIWSReplaySequenceSharesBodies/build_prefix_hit_transfers_current_items\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/nil"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/nil","Output":"=== CONT TestIsOpenAIWSClientDisconnectError/nil\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_string","Output":"--- PASS: TestOpenAIWSExtractNormalizedInputSequence/input_string (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_string","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/io_eof"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/io_eof","Output":"=== CONT TestIsOpenAIWSClientDisconnectError/io_eof\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/omitted_field_stays_valid","Output":"--- PASS: TestValidateOpenAIServiceTierField/omitted_field_stays_valid (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/omitted_field_stays_valid","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/item_reference_does_not_complete_historical_call"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/item_reference_does_not_complete_historical_call","Output":"=== RUN TestBuildOpenAIWSReplayInputSequence/item_reference_does_not_complete_historical_call\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/null_value_keeps_omission_semantics"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/null_value_keeps_omission_semantics","Output":"=== RUN TestValidateOpenAIServiceTierField/null_value_keeps_omission_semantics\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/item_reference_does_not_complete_historical_call","Output":"--- PASS: TestBuildOpenAIWSReplayInputSequence/item_reference_does_not_complete_historical_call (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/item_reference_does_not_complete_historical_call","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/null_value_keeps_omission_semantics","Output":"--- PASS: TestValidateOpenAIServiceTierField/null_value_keeps_omission_semantics (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/null_value_keeps_omission_semantics","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_preserves_current_orphan_custom_tool_call"}
- {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_preserves_current_orphan_custom_tool_call","Output":"=== RUN TestBuildOpenAIWSReplayInputSequence/previous_response_id_preserves_current_orphan_custom_tool_call\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/explicit_empty_string_rejected_as_invalid_enum_value"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/explicit_empty_string_rejected_as_invalid_enum_value","Output":"=== RUN TestValidateOpenAIServiceTierField/explicit_empty_string_rejected_as_invalid_enum_value\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/explicit_empty_string_rejected_as_invalid_enum_value","Output":"--- PASS: TestValidateOpenAIServiceTierField/explicit_empty_string_rejected_as_invalid_enum_value (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/explicit_empty_string_rejected_as_invalid_enum_value","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/non-string_service_tier_rejected"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/non-string_service_tier_rejected","Output":"=== RUN TestValidateOpenAIServiceTierField/non-string_service_tier_rejected\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_preserves_current_orphan_custom_tool_call","Output":"--- PASS: TestBuildOpenAIWSReplayInputSequence/previous_response_id_preserves_current_orphan_custom_tool_call (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_preserves_current_orphan_custom_tool_call","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_full_input_replace"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_full_input_replace","Output":"=== RUN TestBuildOpenAIWSReplayInputSequence/previous_response_id_full_input_replace\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_405","Output":"--- PASS: TestIsRetryableCodexModelsManifestStatus/oauth_405 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_405","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/non-string_service_tier_rejected","Output":"--- PASS: TestValidateOpenAIServiceTierField/non-string_service_tier_rejected (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/non-string_service_tier_rejected","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_401","Output":"--- PASS: TestIsRetryableCodexModelsManifestStatus/api_key_401 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_401","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_full_input_replace","Output":"--- PASS: TestBuildOpenAIWSReplayInputSequence/previous_response_id_full_input_replace (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_full_input_replace","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/oversized_unknown_string_is_truncated"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/oversized_unknown_string_is_truncated","Output":"=== RUN TestValidateOpenAIServiceTierField/oversized_unknown_string_is_truncated\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_404","Output":"--- PASS: TestIsRetryableCodexModelsManifestStatus/oauth_404 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_404","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence","Output":"--- PASS: TestBuildOpenAIWSReplayInputSequence (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/default_equals_standard"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/default_equals_standard","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/default_equals_standard\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel/gpt_reasoning_alias_strips_none","Output":"--- PASS: TestNormalizeOpenAICompatRequestedModel/gpt_reasoning_alias_strips_none (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel/gpt_reasoning_alias_strips_none","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/default_equals_standard","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/default_equals_standard (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/default_equals_standard","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/oversized_unknown_string_is_truncated","Output":"--- PASS: TestValidateOpenAIServiceTierField/oversized_unknown_string_is_truncated (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/oversized_unknown_string_is_truncated","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel/codex_max_model_stays_intact"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel/codex_max_model_stays_intact","Output":"=== RUN TestNormalizeOpenAICompatRequestedModel/codex_max_model_stays_intact\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/fast"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/fast","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/fast\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/non-string_large_object/array_is_not_echoed"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/non-string_large_object/array_is_not_echoed","Output":"=== RUN TestValidateOpenAIServiceTierField/non-string_large_object/array_is_not_echoed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel/codex_max_model_stays_intact","Output":"--- PASS: TestNormalizeOpenAICompatRequestedModel/codex_max_model_stays_intact (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel/codex_max_model_stays_intact","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/fast","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/fast (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/fast","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/windows_connection_reset"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/windows_connection_reset","Output":"=== CONT TestIsOpenAIWSClientDisconnectError/windows_connection_reset\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel/non_openai_model_unchanged"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel/non_openai_model_unchanged","Output":"=== RUN TestNormalizeOpenAICompatRequestedModel/non_openai_model_unchanged\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel/non_openai_model_unchanged","Output":"--- PASS: TestNormalizeOpenAICompatRequestedModel/non_openai_model_unchanged (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel/non_openai_model_unchanged","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/connection_reset_by_peer"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/connection_reset_by_peer","Output":"=== CONT TestIsOpenAIWSClientDisconnectError/connection_reset_by_peer\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel","Output":"--- PASS: TestNormalizeOpenAICompatRequestedModel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/non-string_large_object/array_is_not_echoed","Output":"--- PASS: TestValidateOpenAIServiceTierField/non-string_large_object/array_is_not_echoed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/non-string_large_object/array_is_not_echoed","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/wrapped_eof_message"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/wrapped_eof_message","Output":"=== CONT TestIsOpenAIWSClientDisconnectError/wrapped_eof_message\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField","Output":"--- PASS: TestValidateOpenAIServiceTierField (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_policy_violation"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_policy_violation","Output":"=== CONT TestIsOpenAIWSClientDisconnectError/ws_policy_violation\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_abnormal_1006"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_abnormal_1006","Output":"=== CONT TestIsOpenAIWSClientDisconnectError/ws_abnormal_1006\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_no_status"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_no_status","Output":"=== CONT TestIsOpenAIWSClientDisconnectError/ws_no_status\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_going_away"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_going_away","Output":"=== CONT TestIsOpenAIWSClientDisconnectError/ws_going_away\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_normal_closure"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_normal_closure","Output":"=== CONT TestIsOpenAIWSClientDisconnectError/ws_normal_closure\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/context_canceled"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/context_canceled","Output":"=== CONT TestIsOpenAIWSClientDisconnectError/context_canceled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/net_closed"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/net_closed","Output":"=== CONT TestIsOpenAIWSClientDisconnectError/net_closed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies/build_prefix_hit_transfers_current_items","Output":"--- PASS: TestOpenAIWSReplaySequenceSharesBodies/build_prefix_hit_transfers_current_items (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies/build_prefix_hit_transfers_current_items","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_number"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_number","Output":"=== RUN TestOpenAIWSExtractNormalizedInputSequence/input_number\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies","Output":"--- PASS: TestOpenAIWSReplaySequenceSharesBodies (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_number","Output":"--- PASS: TestOpenAIWSExtractNormalizedInputSequence/input_number (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_number","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/native_responses","Output":"--- PASS: TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/native_responses (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/native_responses","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_bool"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_bool","Output":"=== RUN TestOpenAIWSExtractNormalizedInputSequence/input_bool\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_bool","Output":"--- PASS: TestOpenAIWSExtractNormalizedInputSequence/input_bool (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_bool","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/chat_bridge","Output":"--- PASS: TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/chat_bridge (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/chat_bridge","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/mixed_routes","Output":"--- PASS: TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/mixed_routes (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/mixed_routes","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_null"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_null","Output":"=== RUN TestOpenAIWSExtractNormalizedInputSequence/input_null\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_legacy_text_model"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_legacy_text_model","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_legacy_text_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes","Output":"--- PASS: TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_legacy_text_model","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_legacy_text_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_legacy_text_model"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/nil","Output":"--- PASS: TestIsOpenAIWSClientDisconnectError/nil (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/nil","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/io_eof","Output":"--- PASS: TestIsOpenAIWSClientDisconnectError/io_eof (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/io_eof","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/windows_connection_reset","Output":"--- PASS: TestIsOpenAIWSClientDisconnectError/windows_connection_reset (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/windows_connection_reset","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/connection_reset_by_peer","Output":"--- PASS: TestIsOpenAIWSClientDisconnectError/connection_reset_by_peer (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/connection_reset_by_peer","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_null","Output":"--- PASS: TestOpenAIWSExtractNormalizedInputSequence/input_null (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_null","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/broken_pipe"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/broken_pipe","Output":"=== CONT TestIsOpenAIWSClientDisconnectError/broken_pipe\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host_with_unknown_model"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host_with_unknown_model","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host_with_unknown_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_401","Output":"--- PASS: TestIsRetryableCodexModelsManifestStatus/oauth_401 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_401","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_405","Output":"--- PASS: TestIsRetryableCodexModelsManifestStatus/api_key_405 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_405","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/server_error","Output":"--- PASS: TestIsRetryableCodexModelsManifestStatus/server_error (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/server_error","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/rate_limited","Output":"--- PASS: TestIsRetryableCodexModelsManifestStatus/rate_limited (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/rate_limited","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_403","Output":"--- PASS: TestIsRetryableCodexModelsManifestStatus/api_key_403 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_403","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_400","Output":"--- PASS: TestIsRetryableCodexModelsManifestStatus/api_key_400 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_400","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/wrapped_eof_message","Output":"--- PASS: TestIsOpenAIWSClientDisconnectError/wrapped_eof_message (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/wrapped_eof_message","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus","Output":"--- PASS: TestIsRetryableCodexModelsManifestStatus (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/priority_alias"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/priority_alias","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/priority_alias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_invalid_array_json"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_invalid_array_json","Output":"=== RUN TestOpenAIWSExtractNormalizedInputSequence/input_invalid_array_json\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host_with_unknown_model","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host_with_unknown_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host_with_unknown_model"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.6"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.6","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.6\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_invalid_array_json","Output":"--- PASS: TestOpenAIWSExtractNormalizedInputSequence/input_invalid_array_json (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_invalid_array_json","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence","Output":"--- PASS: TestOpenAIWSExtractNormalizedInputSequence (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/mixed_official_and_custom_Grok_candidates"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/mixed_official_and_custom_Grok_candidates","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/mixed_official_and_custom_Grok_candidates\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/priority_alias","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/priority_alias (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/priority_alias","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/no_tier_unchanged"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/no_tier_unchanged","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/no_tier_unchanged\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/no_tier_unchanged","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/no_tier_unchanged (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/no_tier_unchanged","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/default_equals_standard"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/default_equals_standard","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/default_equals_standard\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/default_equals_standard","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/default_equals_standard (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/default_equals_standard","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/fast"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/fast","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/fast\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/fast","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/fast (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/fast","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/priority_alias"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/priority_alias","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/priority_alias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/priority_alias","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/priority_alias (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/priority_alias","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/no_tier_unchanged"}
- {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/no_tier_unchanged","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/no_tier_unchanged\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/no_tier_unchanged","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/no_tier_unchanged (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/no_tier_unchanged","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/default_equals_standard"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/default_equals_standard","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/default_equals_standard\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/default_equals_standard","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/default_equals_standard (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/default_equals_standard","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/fast"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/fast","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/fast\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.101Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.6-terra -\u003e gpt-5.6-terra(static)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_policy_violation","Output":"--- PASS: TestIsOpenAIWSClientDisconnectError/ws_policy_violation (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_policy_violation","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_abnormal_1006","Output":"--- PASS: TestIsOpenAIWSClientDisconnectError/ws_abnormal_1006 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_abnormal_1006","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_no_status","Output":"--- PASS: TestIsOpenAIWSClientDisconnectError/ws_no_status (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_no_status","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_going_away","Output":"--- PASS: TestIsOpenAIWSClientDisconnectError/ws_going_away (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_going_away","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/context_canceled","Output":"--- PASS: TestIsOpenAIWSClientDisconnectError/context_canceled (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/context_canceled","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_normal_closure","Output":"--- PASS: TestIsOpenAIWSClientDisconnectError/ws_normal_closure (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_normal_closure","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/net_closed","Output":"--- PASS: TestIsOpenAIWSClientDisconnectError/net_closed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/net_closed","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.101Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.6-terra -\u003e gpt-5.6-terra(static)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/net_closed","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/fast","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/fast (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/fast","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_API_key"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_API_key","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_API_key\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/priority_alias"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/priority_alias","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/priority_alias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host_with_unknown_model"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host_with_unknown_model","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host_with_unknown_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/broken_pipe","Output":"--- PASS: TestIsOpenAIWSClientDisconnectError/broken_pipe (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/broken_pipe","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.101Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.6-terra -\u003e gpt-5.6-terra(static)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/broken_pipe","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_Composer_has_only_Chat_image_bridge"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_Composer_has_only_Chat_image_bridge","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_Composer_has_only_Chat_image_bridge\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError","Output":"--- PASS: TestIsOpenAIWSClientDisconnectError (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.102Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.6-terra -\u003e gpt-5.6-terra(static)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/malformed_Grok_host"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/malformed_Grok_host","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/malformed_Grok_host\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.20_vision_model"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.20_vision_model","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.20_vision_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_Build_vision_host"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_Build_vision_host","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_Build_vision_host\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_Build_vision_host","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.102Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.6-terra -\u003e gpt-5.6-terra(static)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/priority_alias","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/priority_alias (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/priority_alias","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/no_tier_unchanged"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/no_tier_unchanged","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/no_tier_unchanged\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_3_Mini_is_text_only"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_3_Mini_is_text_only","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_3_Mini_is_text_only\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_3_Mini_is_text_only","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.102Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.6-terra -\u003e gpt-5.6-terra(static)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.6","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.6 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.6","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_legacy_text_model"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_legacy_text_model","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_legacy_text_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_legacy_text_model","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.102Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.6-terra -\u003e gpt-5.6-terra(static)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/malformed_Grok_host","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/malformed_Grok_host (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/malformed_Grok_host","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/no_tier_unchanged","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/no_tier_unchanged (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/no_tier_unchanged","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/mixed_official_and_custom_Grok_candidates","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/mixed_official_and_custom_Grok_candidates (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/mixed_official_and_custom_Grok_candidates","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/default_equals_standard"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/default_equals_standard","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/default_equals_standard\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_API_key","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_API_key (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_API_key","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host_with_unknown_model","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host_with_unknown_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host_with_unknown_model","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.102Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.6-terra -\u003e gpt-5.6-terra(static)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.20_vision_model","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.20_vision_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.20_vision_model","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_Composer_has_only_Chat_image_bridge","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_Composer_has_only_Chat_image_bridge (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_Composer_has_only_Chat_image_bridge","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.102Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.6-terra -\u003e gpt-5.6-terra(static)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_Composer_has_only_Chat_image_bridge","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/default_equals_standard","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/default_equals_standard (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/default_equals_standard","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/fast"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/fast","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/fast\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.102Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.6-luna -\u003e gpt-5.6-luna(static)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.102Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.6-luna -\u003e gpt-5.6-luna(static)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/fast","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/fast (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/fast","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/priority_alias"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/priority_alias","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/priority_alias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/priority_alias","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.102Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.6-luna -\u003e gpt-5.6-luna(static)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/priority_alias","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.102Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.6-luna -\u003e gpt-5.6-luna(static)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/priority_alias","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.102Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.6-luna -\u003e gpt-5.6-luna(static)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/priority_alias","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/priority_alias (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/priority_alias","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_legacy_text_model","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_legacy_text_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_legacy_text_model","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/no_tier_unchanged"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/no_tier_unchanged","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/no_tier_unchanged\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/no_tier_unchanged","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.102Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.6-luna -\u003e gpt-5.6-luna(static)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/no_tier_unchanged","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.102Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.6-luna -\u003e gpt-5.6-luna(static)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/no_tier_unchanged","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/no_tier_unchanged (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/no_tier_unchanged","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/default_equals_standard"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/default_equals_standard","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/default_equals_standard\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/default_equals_standard","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.102Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.6-luna -\u003e gpt-5.6-luna(static)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_Build_vision_host","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_Build_vision_host (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_Build_vision_host","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.102Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.6-luna -\u003e gpt-5.6-luna(static)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_Build_vision_host","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/default_equals_standard","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/default_equals_standard (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/default_equals_standard","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_3_Mini_is_text_only","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_3_Mini_is_text_only (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_3_Mini_is_text_only","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.1063374+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities","Elapsed":0}
- {"Time":"2026-09-12T11:39:33.1063374+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestUsesAdministratorConfiguration","Output":"--- PASS: TestBuildGroupConfiguredCodexModelsManifestUsesAdministratorConfiguration (0.01s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.2990891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestUsesAdministratorConfiguration","Elapsed":0.01}
- {"Time":"2026-09-12T11:39:33.2990891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_GetOpenAIUsage_DoesNotPromoteCodexExtraToRateLimit","Output":"--- PASS: TestAccountUsageService_GetOpenAIUsage_DoesNotPromoteCodexExtraToRateLimit (0.20s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.2990891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_GetOpenAIUsage_DoesNotPromoteCodexExtraToRateLimit","Elapsed":0.2}
- {"Time":"2026-09-12T11:39:33.2990891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_PersistOpenAICodexProbeSnapshotOnlyUpdatesExtra","Output":"--- PASS: TestAccountUsageService_PersistOpenAICodexProbeSnapshotOnlyUpdatesExtra (0.20s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.2990891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_PersistOpenAICodexProbeSnapshotOnlyUpdatesExtra","Elapsed":0.2}
- {"Time":"2026-09-12T11:39:33.2990891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Output":"FAIL\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.3180238+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Output":"FAIL\tgithub.com/Wei-Shaw/sub2api/internal/service\t66.376s\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:39:33.3180238+08:00","Action":"fail","Package":"github.com/Wei-Shaw/sub2api/internal/service","Elapsed":66.376}
|